PHP Curl http代码100和失败

PHP Curl http代码100和失败,php,web-services,rest,curl,http-status-code-100,Php,Web Services,Rest,Curl,Http Status Code 100,我正在尝试将web服务与php curl一起使用,但是我得到了http代码“100”和一个“Recv failure:Connection was reset”错误。。我用google chrome的扩展名“Postman-REST客户端”测试了这个web服务,它工作得非常好。我搜索了这个http代码,看起来服务器需要一个body请求数据,但我不知道它希望我发送什么,因为我没有发布任何数据,只是发布了标题 我的代码如下所示: error_reporting(-1); $header =

我正在尝试将web服务与php curl一起使用,但是我得到了http代码“100”和一个“Recv failure:Connection was reset”错误。。我用google chrome的扩展名“Postman-REST客户端”测试了这个web服务,它工作得非常好。我搜索了这个http代码,看起来服务器需要一个body请求数据,但我不知道它希望我发送什么,因为我没有发布任何数据,只是发布了标题

我的代码如下所示:

error_reporting(-1);

    $header = array('Content-Length: 1831', 'Content-Type: application/json', 'Authorization: '. $authorization, 'Authorization-Admin: '. $authorization_admin);
    $url = 'http://api.bookingreports.com/public/1/analytics/reports/departures';


    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);


    $result = curl_exec($ch); 
    $errorCode = curl_getinfo($ch, CURLINFO_HEADER_OUT);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    echo $result;
    echo curl_error($ch);
    echo $errorCode;
    echo $httpcode;

    //log_message('debug', 'HTTP HEADER '. $errorCode); 
    curl_close($ch);
POST /public/1/analytics/reports/departures HTTP/1.1
Host: api.bookingreports.com
Accept: */*
Content-Length: 1831
Content-Type: application/json
Authorization: myauthcode
Authorization-Admin: myauthadmin
Expect: 100-continue
我发送的标题如下所示:

error_reporting(-1);

    $header = array('Content-Length: 1831', 'Content-Type: application/json', 'Authorization: '. $authorization, 'Authorization-Admin: '. $authorization_admin);
    $url = 'http://api.bookingreports.com/public/1/analytics/reports/departures';


    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);


    $result = curl_exec($ch); 
    $errorCode = curl_getinfo($ch, CURLINFO_HEADER_OUT);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    echo $result;
    echo curl_error($ch);
    echo $errorCode;
    echo $httpcode;

    //log_message('debug', 'HTTP HEADER '. $errorCode); 
    curl_close($ch);
POST /public/1/analytics/reports/departures HTTP/1.1
Host: api.bookingreports.com
Accept: */*
Content-Length: 1831
Content-Type: application/json
Authorization: myauthcode
Authorization-Admin: myauthadmin
Expect: 100-continue

您发送了错误的
内容长度
值。这就是服务器需要请求主体的原因。
由于您没有发送任何数据,
内容长度
应设置为
0

$header = array('Content-Length: 0', 'Content-Type: application/json', 'Authorization: '. $authorization, 'Authorization-Admin: '. $authorization_admin);

当您决定手动编写请求头时,请确保将
内容长度
设置为正确的值。

我注意到cURL为您添加了一个额外的
Expect
头,因此我认为这个问题可能会帮助您:@AgreeOrNot我已经尝试过这两种解决方案。。FAILONERROR没有任何区别,如果我从报头中删除Expect,响应的http代码为“0”,我知道这意味着找不到主机。。我不明白这一点,因为正如我所说,我已经用谷歌chrome的REST客户端扩展测试了这个web服务,它工作得很好。问题可能是
内容长度:1831
?如果您不发布任何数据,它应该是
0
。@同意或不同意,我只是注意到,当我从HEAD中删除Expect时,HEAD的输出post中对HEAD的curl进行了更改,因此它看起来像是“HEAD/public/1/analytics/reports/departments HTTP/1.1”。。这一定是问题所在,因为api需要POST方法。。知道curl为什么要这样做或如何修复它吗?@Agreeorn问题没有解决!正如您所说,我将内容长度更改为0,并通过此问题解决了头部问题。。我添加了这行curl_setopt($ch,CURLOPT_NOBODY,true);正在尝试的东西。。非常感谢