cURL PHP 在收到标头后挂起
Posted
技术标签:
【中文标题】cURL PHP 在收到标头后挂起【英文标题】:cURL PHP hangs just after receive headers 【发布时间】:2013-10-13 22:41:04 【问题描述】:使用 php,我已经能够通过 paypal 沙箱端点连接并处理成功的购买:
https://api-3t.sandbox.paypal.com/nvp
但是,当我尝试实时移动此应用程序时,我遇到了一些问题。 首先,沙盒账户使用签名,真实账户使用证书。所以我必须使用它的新端点:
https://api.paypal.com/nvp
在我使用证书时摆脱“-3t”。
然后我将 vb.net 中的发布数据发送到该地址,该地址生成一个令牌,然后我可以发送出去。这工作正常,但是当用户在贝宝(ReturnURL)中确认后返回我们的网站时,我正在使用 curl 处理 api 所需的下一个命令,方法:GetExpressCheckoutDetails。然后,如果成功,我将继续使用 curl 在另一个页面上使用方法完成付款:DoExpressCheckoutPayment
问题是 curl 挂起并且页面无法加载。
如果我输入使用 linux 终端尝试使用 curl 到 api,它也会挂起。
curl --verbose https://api.paypal.com/nvp
我得到的响应,经过握手,然后在标题之后,就停止了。但它不会返回命令行。 这是 curl 输出:
User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: api.paypal.com
> Accept: */*
>
* About to connect() to api.paypal.com port 443
* Trying 173.0.84.66... connected
* Connected to api.paypal.com (173.0.84.66) port 443
* successfully set certificate verify locations:
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* SSLv2, Client hello (1):
SSLv3, TLS handshake, Server hello (2):
SSLv3, TLS handshake, CERT (11):
SSLv3, TLS handshake, Request CERT (13):
SSLv3, TLS handshake, Server finished (14):
SSLv3, TLS handshake, CERT (11):
SSLv3, TLS handshake, Client key exchange (16):
SSLv3, TLS change cipher, Client hello (1):
SSLv3, TLS handshake, Finished (20):
SSLv3, TLS change cipher, Client hello (1):
SSLv3, TLS handshake, Finished (20):
SSL connection using DES-CBC3-SHA
* Server certificate:
* subject: /C=US/ST=California/L=San Jose/O=PayPal, Inc./OU=PayPal Production/CN=api.paypal.com
* start date: 2013-07-03 00:00:00 GMT
* expire date: 2015-07-04 23:59:59 GMT
* subjectAltName: api.paypal.com matched
* issuer: /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
* SSL certificate verify ok.
> GET /nvp HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: api.paypal.com
> Accept: */*
>
(这不是因为我没有发送方法、用户或密码,因为即使我发送了,它也是一样的) 我怀疑它与 API 证书有关! 任何人都知道这里发生了什么,谢谢。
编辑: 使用 wget 进行测试,以排除它是卷曲问题的可能性:
wget https://api.paypal.com/nvp
回复是:
--2013-10-08 08:45:53-- https://api.paypal.com/nvp
Resolving api.paypal.com.. 173.0.88.98, 173.0.84.98, 173.0.84.66, ...
Connecting to api.paypal.com|173.0.88.98|:443... connected.
HTTP request send, awaiting response...
这也是 wget 挂起的地方,这证明它不仅仅是 cURL 的问题?
【问题讨论】:
【参考方案1】:我不熟悉 VB,但我确实注意到了这一点
CAfile: /etc/pki/tls/certs/ca-bundle.crt
我还使用了证书(我回到 1.0 版!),并且不需要具有此设置的链 (CA) 文件(这些不是实时签名的 SSL 证书)。那可能是你的问题。
【讨论】:
这不是因为它正在连接到https://
,并且需要SSL证书来连接吗?但是,它确实连接,只是没有关闭页面?
我看错了。是的,它看起来像它连接。您是否尝试过发布任何内容? API 正在等待 POST 响应,因此它可能正在等待该响应以上是关于cURL PHP 在收到标头后挂起的主要内容,如果未能解决你的问题,请参考以下文章
MFC 应用程序在 CSingleLock Lock() 后挂起
database/sql rows.scan 在 350K 行后挂起