如何使用CURL扩展来发送和接收XML格式的数据给个例子,新手进入PHP,据查看的资料来看,可以使用SOCKET和CURL来发送和接收XML数据请兄弟们帮帮忙。对方是使用JAVA发送过来XML的数据!

解决方案 »

  1.   

    我已经查询了很多网络上的资料。$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,在本机上收发。
      

  2.   

    不添加发送头信息,后台用$_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);
      

  3.   

    1.代码我本地测试了下是可以的,其中$url是一本地文件地址(http://localhost...),$acContent是file_get_contents拿到的一个xml文件。
    2.自己google点资料吧,http://www.samtseng.liho.tw/~samtz/blog/?p=1474
      

  4.   

    要么就用xxx=$xml这种格式传.
    要么就用file_get_contents("php://input");来获取.
      

  5.   


    貌似lz对HTTP协议还不太理解。PHP主要是用来处理HTTP服务的语言,如果对方发送的信息遵循HTTP协议,你不需要做任何特殊的设定,
    直接从$_REQUEST、$_POST等变量中就可以得到想要的数据。CURL是客户端程序,用它可以做HTTP客户端请求,但是接收HTTP协议下的通信数据不需要它。lz可以用axis tcpmon监视一下正常HTTP通信下传送的数据,熟悉一下HTTP协议,然后再监视对方提供的Java通信状况,看看他们提供的客户程序是否有错误。
      

  6.   

    $HTTP_RAW_POST_DATA;
    -->
    接收不到JAVA发过来的POST数据.
      

  7.   


    enctype="multipart/form-data"有效的时候$HTTP_RAW_POST_DATA是无效的,
    lz看看是不是此原因。
      

  8.   

    如果需要上传文件,只能用$_POST。
    不过,最好还是客户端遵循HTTP协议的参数传送方式比较好。看一下这里的说明:
    http://www.php.net/manual/en/reserved.variables.php
      

  9.   

    呵呵,要按http协议发送,估计java那边的哥们就不乐意了,soap协议多方便,事实上soap就是解决不用语言交互的问题而设计的,当然lz能和客户端那边协商是最好啦。
    lz没测试file_get_contents("php://input");这个吗?
      

  10.   

    soap协议跟HTTP协议发生冲突?
    什么理论?
    如果是标准SOAP的话,直接用PHP的SOAP接口就可以了,不用现在这么费劲。
      

  11.   

    不是冲突,soap肯定也是基于http,就是post的格式不同而已。
    我的意思是http协议下就是post a=1&b=1&c=1这样的串,而soap就是整个xml串提交,由php这边解析
    你如果让java端按http协议发送,需要java端解析xml。
      

  12.   

    估计简单的用file_get_contents可能可以。用Curl库的话,只需了解如何发送请求和接收请求,网上这种代码很多。用Socket与Curl差不多。怕Java那边会有点“不合作”。
      

  13.   

    谢谢各位,我现在发送和接收XML都没有什么问题了。过段时间正式完成后,我会公布心得,和大家分享!现在还有一个问题。我如何接收ECHO回来的值!http://topic.csdn.net/u/20090620/00/f455bfa4-9ec0-4df8-98c5-4d86e43813fd.html