- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 php 上使用 curl 命令,我想请求一个简单的访问“https://www.instagram.com”。
$curl->get("https://www.instagram.com");
当我不为我的 curl 使用 Proxy 时,它通常会完成(有时 curl 第一次失败然后重试并第二次通过)。
< Content-Type: text/html
< Date: Fri, 12 Jun 2015 11:35:56 GMT
< Location: https://instagram.com/
* Server nginx is not blacklisted
< Server: nginx
< Content-Length: 178
< Connection: keep-alive
<
* Ignoring the response-body
* Connection #1 to host www.instagram.com left intact
* Issue another request to this URL: 'https://instagram.com/'
* Hostname was NOT found in DNS cache
* Trying 54.88.218.232...
* Connected to instagram.com (54.88.218.232) port 443 (#2)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* server certificate verification SKIPPED
* common name: *.instagram.com (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: C=US,ST=CA,L=Menlo Park,O=Instagram LLC,CN=*.instagram.com
* start date: Tue, 14 Apr 2015 00:00:00 GMT
* expire date: Thu, 15 Oct 2015 12:00:00 GMT
* issuer: C=US,O=DigiCert Inc,OU=www.digicert.com,CN=DigiCert High Assurance CA-3
* compression: NULL
* cipher: AES-128-CBC
* MAC: SHA1
> GET / HTTP/1.1
Host: instagram.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate
Connection: Keep-Alive
Cache-Control:no-cache
Content-type: application/x-www-form-urlencoded;charset=UTF-8
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
< HTTP/1.1 200 OK
< Cache-Control: private, no-cache, no-store, must-revalidate
< Content-Encoding: gzip
< Content-Language: en
< Content-Type: text/html
< Date: Fri, 12 Jun 2015 11:35:59 GMT
< Expires: Sat, 01 Jan 2000 00:00:00 GMT
< Pragma: no-cache
* Added cookie csrftoken="c44fef8af558485be2ff78da940bdfd6" for domain instagram.com, path /, expire 1465558381
< Set-Cookie: csrftoken=c44fef8af558485be2ff78da940bdfd6; expires=Fri, 10-Jun-2016 11:35:59 GMT; Max-Age=31449600; Path=/
* Added cookie mid="VXrEHwAEAAE0R2ZgV8aoF27i7VD7" for domain instagram.com, path /, expire 2064828781
< Set-Cookie: mid=VXrEHwAEAAE0R2ZgV8aoF27i7VD7; expires=Thu, 07-Jun-2035 11:35:59 GMT; Max-Age=630720000; Path=/
< Vary: Cookie, Accept-Language, Accept-Encoding
< X-Frame-Options: SAMEORIGIN
< Content-Length: 3049
< Connection: keep-alive
<
* Connection #2 to host instagram.com left intact
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7 not-logged-in "> <![endif]-->
<!--[if IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 not-logged-in "> <![endif]-->
<!--[if IE 8]> <html lang="en" class="no-js lt-ie9 not-logged-in "> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en" class="no-js not-logged-in "> <!--<![endif]-->
问题是当我在我的 curl 上使用代理时,95% 的时间它卡在“found 173 certificates in/etc/ssl/certs/ca-certificates.crt”然后超时。
* Rebuilt URL to: https://www.instagram.com/
* Hostname was found in DNS cache
* Trying 104.144.1.1...
* Connected to 104.144.1.1 (104.144.1.1) port 21269 (#1)
* Establish HTTP proxy tunnel to www.instagram.com:443
* Proxy auth using Basic with user 'proxyusername'
> CONNECT www.instagram.com:443 HTTP/1.1
Host: www.instagram.com:443
Proxy-Authorization: Basic bW9oYW1tYWdoYToyazMzODczMw==
Proxy-Connection: Keep-Alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate
Connection: Keep-Alive
Cache-Control:no-cache
Content-type: application/x-www-form-urlencoded;charset=UTF-8
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
< HTTP/1.0 200 Connection established
<
* Proxy replied OK to CONNECT request
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* Operation timed out after 0 milliseconds with 0 out of 0 bytes received
* Closing connection 1
为什么使用代理会使 curl 在 ubuntu 上以这种方式运行?在 Windows 操作系统上,完全相同的代码执行并运行得非常快,并获取 instagram.com 页面,但在 Ubuntu 上,它有 95% 的时间失败。
这是 curl 的选项:
curl_setopt ( $this->process, CURLOPT_HTTPHEADER, $this->headers );
curl_setopt ( $this->process, CURLOPT_HEADER, 0 );
curl_setopt ( $this->process, CURLOPT_USERAGENT, $this->user_agent );
curl_setopt ( $this->process, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $this->process, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $this->process, CURLOPT_POST, 0 );
curl_setopt ( $this->process, CURLOPT_ENCODING, $this->compression );
curl_setopt ( $this->process, CURLOPT_TIMEOUT, 40 );
curl_setopt ( $this->process, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt ( $this->process, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt ( $this->process, CURLOPT_COOKIEFILE, $this->cookie_file );
curl_setopt ( $this->process, CURLOPT_COOKIEJAR, $this->cookie_file );
curl_setopt ( $this->process, CURLOPT_VERBOSE, 1 );
// Proxy settings
curl_setopt ( $this->process, CURLOPT_PROXYTYPE, 'HTTP');
curl_setopt ( $this->process, CURLOPT_PROXY, $url);
curl_setopt ( $this->process, CURLOPT_PROXYPORT, $port);
curl_setopt ( $this->process, CURLOPT_PROXYUSERPWD, $userpass);
这是 phpinfo() 在 curl 上的结果:
cURL support => enabled
cURL Information => 7.35.0
Age => 3
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => Yes
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => No
SSL => Yes
SSPI => No
TLS-SRP => Yes
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtmp, rtsp, smtp, smtps, telnet, tftp
Host => x86_64-pc-linux-gnu
SSL Version => GnuTLS/2.12.23
ZLib Version => 1.2.8
最佳答案
看来您的证书有问题...试试下面的方法,它在过去对我有用,但有类似(但不同)的问题。
update-ca-certificates -f
apt-get install --reinstall ca-certificates
供您引用,这是 update-ca-certificates 的人
update-ca-certificates is a program that updates the directory /etc/ssl/certs to hold SSL certificates and generates certificates.crt, a concatenated single-file list of certificates.
It reads the file /etc/ca-certificates.conf. Each line gives a pathname of a CA certificate under /usr/share/ca-certificates that should be trusted. Lines that begin with "#" are comment lines and thus ignored. Lines that begin with "!" are deselected, causing the deactivation of the CA certificate in question. Certificates must have a .crt extension in order to be included by update-ca-certificates.
Furthermore all certificates with a .crt extension found
below /usr/local/share/ca-certificates are also included as implicitly trusted.
关于使用代理的 PHP Curl http 请求有 95% 的时间失败,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804704/
据我了解,HTTP POST 请求的正文大小没有限制。因此,客户端可能会在一个 HTTP 请求中发送 千兆字节 的数据。现在我想知道 HTTP 服务器应该如何处理此类请求。 Tomcat 和 Jett
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
假设我有一个负载均衡器,然后是 2 个 Web 服务器,然后是一个负载均衡器,然后是 4 个应用程序服务器。 HTTP 响应是否遵循与 HTTP 请求服务相同的路径? 最佳答案 按路径,我假设您是网络
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
是否有特定的(或约定的)HTTP 响应消息(或除断开连接之外的其他操作)来阐明服务器不接受 pipelined HTTP requests ? 我正在寻找能让客户端停止流水线化它的请求并分别发送每个请
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我使用 Mule 作为 REST API AMQP。我必须发送自定义请求方法:“PRINT”,但我收到: Status Code: 400 Bad Request The request could
我需要针对具有不同 HTTP 响应代码的 URL 测试我的脚本。我如何获取响应代码 300、303 或 307 等的示例/示例现有 URL? 谢谢! 最佳答案 您可以使用 httpbin为此目的。 例
我正在尝试编写一个程序来匹配 HTTP 请求及其相应的响应。似乎在大多数情况下一切都运行良好(当传输完全有序时,即使不是,通过使用 TCP 序列号)。 我发现的唯一问题是当我有流水线请求时。在那之后,
RESTful Web Services鼓励使用 HTTP 303将客户端重定向到资源的规范表示。它仅在 HTTP GET 的上下文中讨论主题。 这是否也适用于其他 HTTP 方法?如果客户端尝试对非
当使用chunked HTTP传输编码时,为什么服务器需要同时写出chunk的字节大小并且后续的chunk数据以CRLF结尾? 这不会使发送二进制数据“CRLF-unclean”和方法有点多余吗? 如
这个问题在这里已经有了答案: Is it acceptable for a server to send a HTTP response before the entire request has
如果我向同一台服务器发出多个 HTTP Get 请求并收到每个请求的 HTTP 200 OK 响应,我如何使用 Wireshark 判断哪个请求映射到哪个响应? 目前看起来像是发出了一个 http 请
func main() { http.HandleFunc("/", handler) } func handler(w http.ResponseWriter, r http.Request
我找不到有值(value)的 NodeJS with Typescript 教程,所以我在无指导下潜入水中,果然我有一个问题。 我不明白这两行之间的区别: import * as http from
问一个关于Are HTTP headers case-sensitive?的问题,如果 HTTP 方法区分大小写,大多数服务器如何处理“get”或“post”与“GET”或“POST”? 例如,看起来
我正在使用ASP.NET,在其中我通过动词GET接收查询,该应用程序专用于该URL。 该代码有效,但是如果用户发送的密码使http 200无效,请回答我,并在消息的正文中显示“Fail user or
Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。 9
我是一名优秀的程序员,十分优秀!