【问题标题】:cURL PUT Requests hangscURL PUT 请求挂起
【发布时间】:2016-06-23 04:49:00
【问题描述】:

所以这是我的问题。

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

环境

  1. PHP 5.6.16
  2. Apache 2.4.17
  3. Windows 10 64 位
  4. Wamp 3 64 位

卷曲--版本

 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. 在命令行执行相同的命令->相同的结果
  2. 在我的 Atom 编辑器上尝试 REST 客户端并成功
  3. 我的一个朋友尝试远程访问我的数据库并成功(所以 CouchDB 似乎不是问题)

【问题讨论】:

  • 如果您从命令行尝试curl -X PUT http://127.0.0.1:5984/database_name,它是否按预期工作?
  • @drew010 是的,它也挂了

标签: php ssl curl wamp freeze


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2014-05-09
    • 2012-01-08
    • 2011-12-22
    相关资源
    最近更新 更多