我一直在尝试发布XML并从服务器获取响应,但是没有运气。

这是服务器端的条件:

  • 对服务器的请求应通过HTTP 1.1以XML的形式发送。

  • 以下要求适用于HTTP请求:
  • 请求类型应为POST;
  • 应该存在Content-Length header ,请求的总长度应小于16KB;
  • 应该存在一个Content-Type header ,其中包含媒体类型值text/xml

  • 这是我的脚本:
    $url = "http://somedomain.com";
    $xml = '<?xml version="1.0" encoding="UTF-8"?>
    <Request PartnerID="asasdsadsa" Type="TrackSearch"> <TrackSearch> <Title>love</Title>    <Tags> <MainGenre>Blues</MainGenre> </Tags> <Page Number="1" Size="20"/> </TrackSearch> </Request>';
    $header  = "POST HTTP/1.1 \r\n";
    $header .= "Content-type: text/xml \r\n";
    $header .= "Content-length: ".strlen($xml)." \r\n";
    $header .= "Connection: close \r\n\r\n";
    $header .= $xml;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
    $data = curl_exec($ch);
    echo $data;
    if(curl_errno($ch))
        print curl_error($ch);
    else
        curl_close($ch);
    

    这给了我:
     HTTP Error 400. The request URL is invalid.
     Bad Request - Invalid URL
    

    最佳答案

    这有帮助吗?

    <?php
    $url = "http://stackoverflow.com";
    $xml = '<?xml version="1.0" encoding="UTF-8"?><Request PartnerID="asasdsadsa" Type="TrackSearch"> <TrackSearch> <Title>love</Title>    <Tags> <MainGenre>Blues</MainGenre> </Tags> <Page Number="1" Size="20"/> </TrackSearch> </Request>';
    
    $headers = array(
        "Content-type: text/xml",
        "Content-length: " . strlen($xml),
        "Connection: close",
    );
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    $data = curl_exec($ch);
    echo $data;
    if(curl_errno($ch))
        print curl_error($ch);
    else
        curl_close($ch);
    ?>
    

    10-07 13:18
    查看更多