在PHP中使用CURL接收到错误的请求以发布XML数据

问题描述 投票:0回答:1

[我正在使用PHP CURL将一些xml数据发布到使用该IP的另一台服务器,我满足了使它工作的所有要求,但仍然收到“ BAD REQUEST”错误。

请看下面的代码。

 $var2 ="<doc><item>Some content.</item></doc>";
    $url = "server IP";     
    $header  = "POST HTTP/1.1 \r\n";
    $header .= "Content-type: text/xml \r\n";
    $header .= "Content-length: ".strlen($var2)." \r\n";
    $header .= "Content-transfer-encoding: text \r\n";
    $header .= "Connection: close \r\n\r\n"; 
    $header .= $var2;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 4);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $var2);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);

    // Get Response
    $data = curl_exec($ch); 


    if(curl_errno($ch))

        print curl_error($ch);
    else
        curl_close($ch);

    echo  $data;
php libcurl
1个回答
0
投票

首先,您正在使用它作为请求行:

$header  = "POST HTTP/1.1 \r\n";

根据HTTP 1.1 RFC**Request-Line**应该看起来像这样:

**Request-Line**

所以,看来您应该在Request-Line = Method SP Request-URI SP HTTP-Version CRLF POST之间添加一个URI(但是,在编码之前,请先阅读我在答案的下一段中写的内容)

然后,您传递了很多内容,例如HTTP/1.1。我认为您不能使用该选项(引号)传递所有这些标头:

有效值是“ CURLOPT_CUSTOMREQUEST”,“ GET”,“ POST”等;即,请勿在此处输入整个HTTP请求行。对于例如,输入“ CONNECT”将是不正确。

如果要指定自定义标题(似乎可以),则应使用GET /index.html HTTP/1.0\r\n\r\n选项,而不要使用CURLOPT_HTTPHEADER (引用第一个文件的文档)

要设置的HTTP标头字段数组,格式为CURLOPT_CUSTOMREQUEST

© www.soinside.com 2019 - 2024. All rights reserved.