cURL PUT请求挂起

时间:2016-06-23 04:49:00

标签: php ssl curl wamp hang

所以这是我的问题。

我正在使用curl通过HTTP访问我的CouchDB。我最近将我的WAMP更新为WAMP 3 64位,它带有PHP 5.6.16和Apache 2.4.17。因此,自从这次升级以来,我发现我再也无法做PUT请求了。

的Env

  1. PHP 5.6.16
  2. Apache 2.4.17
  3. Windows 10 64位
  4. Wamp 3 64 bit
  5. 卷曲 - 版本

     curl 7.49.1 (x86_64-pc-win32) libcurl/7.49.1 OpenSSL/1.0.2h nghttp2/1.11.1
    Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
    Features: AsynchDNS IPv6 Largefile NTLM SSL HTTP2
    

    执行代码

    所以当我执行这个时:

    <?php
    $table="testname";
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'http://localhost:5984/' . $table);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, 'validUser:validPass');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-type: application/json',
     'Accept: */*'
    ));
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    echo $response;
    

    我从服务器得到快速回复。

    然后,我尝试创建一个数据库:

    <?php
    $table = "testname";
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, 'http://localhost:5984/' . $table);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, 'validUser:validPass');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-type: application/json',
     'Accept: */*'
    ));
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    echo $response;
    

    问题

    因此,当我执行此代码时,请求将挂起curl_exec。 有点奇怪的是,在超时后,CouchDB会收到请求,但不会给出任何响应。似乎我的“Put”请求被堆叠在缓冲区中,等待执行。

    详细卷曲输出

    * Hostname in DNS cache was stale, zapped
    *   Trying ::1...
    *   Trying 127.0.0.1...
    * Connected to localhost (127.0.0.1) port 5984 (#0)
    * Server auth using Basic with user 'validUser'
    > PUT /customers HTTP/1.1
    Host: localhost:5984
    Authorization: Basic dGVzdEFkbWluOnRlc3RQYXNzd29yZA==
    Content-type: application/json
    Accept: */*
    
    * Operation timed out after 10000 milliseconds with 0 bytes received
    * Closing connection 0
    

    提示

    - 我尝试安装SSL证书,但它似乎不起作用。是否仍安装此证书可能会导致问题? - 我可以在我的Atom编辑器上使用REST客户端执行PUT请求而不会出现问题。 - 我的内部网络路由似乎有问题。我这样说是因为它影响了PHP-Curl以及Curl CLI。此外,我能够执行GET请求,但PUT请求无缘无故地“悬挂”,并且在超时发生时由我的CouchDB“接受”。就像我发送长轮询请求一样。

    经过测试的内容

    1. 在命令行上执行相同的命令 - &gt;相同的结果
    2. 成功地在Atom编辑器上尝试REST客户端
    3. 我的一个朋友试图成功访问我的数据库(所以CouchDB似乎不是问题)

1 个答案:

答案 0 :(得分:1)

即使我在禁用防火墙的情况下进行了测试,卸载我的防病毒软件(Bitdefender Total Security 2016)也解决了我的问题。