如何使用CURL扩展来发送和接收XML格式的数据

lff642 2009-06-15 10:24:31
如何使用CURL扩展来发送和接收XML格式的数据

给个例子,新手进入PHP,

据查看的资料来看,可以使用SOCKET和CURL来发送和接收XML数据

请兄弟们帮帮忙。

对方是使用JAVA发送过来XML的数据!
...全文
1721 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lff642 2009-06-20
  • 打赏
  • 举报
回复
谢谢各位,我现在发送和接收XML都没有什么问题了。

过段时间正式完成后,我会公布心得,和大家分享!

现在还有一个问题。

我如何接收ECHO回来的值!

http://topic.csdn.net/u/20090620/00/f455bfa4-9ec0-4df8-98c5-4d86e43813fd.html
dhgdmw 2009-06-20
  • 打赏
  • 举报
回复
先mark
foolbirdflyfirst 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 froole 的回复:]
引用 14 楼 foolbirdflyfirst 的回复:
呵呵,要按http协议发送,估计java那边的哥们就不乐意了,soap协议多方便,事实上soap就是解决不用语言交互的问题而设计的,当然lz能和客户端那边协商是最好啦。
lz没测试file_get_contents("php://input");这个吗?

soap协议跟HTTP协议发生冲突?
什么理论?

如果是标准SOAP的话,直接用PHP的SOAP接口就可以了,不用现在这么费劲。



[/Quote]
不是冲突,soap肯定也是基于http,就是post的格式不同而已。
我的意思是http协议下就是post a=1&b=1&c=1这样的串,而soap就是整个xml串提交,由php这边解析
你如果让java端按http协议发送,需要java端解析xml。
海诗美妆 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 foolbirdflyfirst 的回复:]
呵呵,要按http协议发送,估计java那边的哥们就不乐意了,soap协议多方便,事实上soap就是解决不用语言交互的问题而设计的,当然lz能和客户端那边协商是最好啦。
lz没测试file_get_contents("php://input");这个吗?
[/Quote]
soap协议跟HTTP协议发生冲突?
什么理论?


如果是标准SOAP的话,直接用PHP的SOAP接口就可以了,不用现在这么费劲。


foolbirdflyfirst 2009-06-17
  • 打赏
  • 举报
回复
呵呵,要按http协议发送,估计java那边的哥们就不乐意了,soap协议多方便,事实上soap就是解决不用语言交互的问题而设计的,当然lz能和客户端那边协商是最好啦。
lz没测试file_get_contents("php://input");这个吗?
海诗美妆 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 froole 的回复:]
引用 11 楼 lff642 的回复:
$HTTP_RAW_POST_DATA;
-->
接收不到JAVA发过来的POST数据.


enctype="multipart/form-data"有效的时候$HTTP_RAW_POST_DATA是无效的,
lz看看是不是此原因。
[/Quote]
如果需要上传文件,只能用$_POST。
不过,最好还是客户端遵循HTTP协议的参数传送方式比较好。

看一下这里的说明:
http://www.php.net/manual/en/reserved.variables.php
海诗美妆 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lff642 的回复:]
$HTTP_RAW_POST_DATA;
-->
接收不到JAVA发过来的POST数据.
[/Quote]

enctype="multipart/form-data"有效的时候$HTTP_RAW_POST_DATA是无效的,
lz看看是不是此原因。
Zijian_Zhang 2009-06-17
  • 打赏
  • 举报
回复
估计简单的用file_get_contents可能可以。

用Curl库的话,只需了解如何发送请求和接收请求,网上这种代码很多。

用Socket与Curl差不多。

怕Java那边会有点“不合作”。
lff642 2009-06-16
  • 打赏
  • 举报
回复
谢谢各位,到此为止,问题基本上解决了。
海诗美妆 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 lff642 的帖子:]
如何使用CURL扩展来发送和接收XML格式的数据

给个例子,新手进入PHP,

据查看的资料来看,可以使用SOCKET和CURL来发送和接收XML数据

请兄弟们帮帮忙。

对方是使用JAVA发送过来XML的数据!
[/Quote]

貌似lz对HTTP协议还不太理解。

PHP主要是用来处理HTTP服务的语言,如果对方发送的信息遵循HTTP协议,你不需要做任何特殊的设定,
直接从$_REQUEST、$_POST等变量中就可以得到想要的数据。

CURL是客户端程序,用它可以做HTTP客户端请求,但是接收HTTP协议下的通信数据不需要它。

lz可以用axis tcpmon监视一下正常HTTP通信下传送的数据,熟悉一下HTTP协议,然后再监视对方提供的Java通信状况,看看他们提供的客户程序是否有错误。
程序猿之殇 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lff642 的回复:]
我已经查询了很多网络上的资料。

$header[]="Content-Type: text/xml; charset=utf-8";
$header[]="User-Agent: Apache/1.3.26 (Unix)";
$header[]="Host: www.test.com";
$header[]="Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";
$header[]="Connection: keep-alive";
$header[]="Content-Length: ".strlen($acContent);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
c…
[/Quote]
要么就用xxx=$xml这种格式传.
要么就用file_get_contents("php://input");来获取.
lff642 2009-06-16
  • 打赏
  • 举报
回复
$HTTP_RAW_POST_DATA;
-->
接收不到JAVA发过来的POST数据.
lff642 2009-06-15
  • 打赏
  • 举报
回复
我已经查询了很多网络上的资料。

$header[]="Content-Type: text/xml; charset=utf-8";
$header[]="User-Agent: Apache/1.3.26 (Unix)";
$header[]="Host: www.test.com";
$header[]="Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";
$header[]="Connection: keep-alive";
$header[]="Content-Length: ".strlen($acContent);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $acContent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$res = curl_exec($ch);
curl_close($ch);



acContent为xml格式的内容

另一段通过$HTTP_RAW_POST_DATA获得xml内容


但是我接收不到值,,

我是操作是系统是WINXP,在本机上收发。
lff642 2009-06-15
  • 打赏
  • 举报
回复
有什么不明白的,都可以详细的问题。


我在线等,解决就结帖,
lff642 2009-06-15
  • 打赏
  • 举报
回复
分不够再加,

提供思路都有分!
foolbirdflyfirst 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lff642 的回复:]
引用 4 楼 foolbirdflyfirst 的回复:
不添加发送头信息,后台用$_POST接受试试
======================================

PHP code$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $acContent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER…
[/Quote]
1.代码我本地测试了下是可以的,其中$url是一本地文件地址(http://localhost...),$acContent是file_get_contents拿到的一个xml文件。
2.自己google点资料吧,http://www.samtseng.liho.tw/~samtz/blog/?p=1474
lff642 2009-06-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 foolbirdflyfirst 的回复:]
不添加发送头信息,后台用$_POST接受试试
======================================

PHP code$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $acContent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$res = curl_exec($ch);
cur…
[/Quote]

这样还是不行。

[Quote=引用 5 楼 foolbirdflyfirst 的回复:]
lz应该考虑弄个web service.
[/Quote]

兄弟你好,能不能介绍一下?
foolbirdflyfirst 2009-06-15
  • 打赏
  • 举报
回复
lz应该考虑弄个web service.
foolbirdflyfirst 2009-06-15
  • 打赏
  • 举报
回复
不添加发送头信息,后台用$_POST接受试试
======================================
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $acContent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$res = curl_exec($ch);
curl_close($ch);
print_r($res);

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧