Итак, вот моя проблема.
Я использую curl для доступа к CouchDB по HTTP. Я недавно обновил свой WAMP до 64-битного WAMP 3, который поставляется с PHP 5.6.16 и Apache 2.4.17. Поэтому после этого обновления я обнаружил, что больше не могу выполнять запрос PUT.
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-сертификат, но он не работает. Наличие этого сертификата все еще может вызвать проблемы?
-Я могу сделать запрос PUT с клиентом REST на моем редакторе Atom без проблем.
-Я, кажется, есть проблема в моем сетевом маршруте внутри. Я говорю это, потому что это повлияло на PHP-Curl так же, как Curl CLI. Кроме того, я могу выполнить запрос GET, но запрос PUT похож на «зависание» без причины и «принимается» моим CouchDB, когда происходит тайм-аут. Это как если бы я отправлял длинный запрос на опрос.
Даже если я провел тестирование с отключенным брандмауэром, удаление антивируса (Bitdefender Total Security 2016) устранило мою проблему.
Других решений пока нет …