PHP CURL 記憶體泄露問題解決方案

來源:互聯網
上載者:User

  這篇文章主要介紹了PHP CURL 記憶體泄露問題解決方案,CRUL長時間訪問HTTPS網站時有記憶體泄露問題,本文經過反覆調試找到瞭解決方法,需要的朋友可以參考下

  phpcurl使用privoxy代理訪問https://www.google.com/search?q=xxx

  curl配置平淡無奇,長時間運行發現一個嚴重問題,記憶體泄露!不論用單線程和多線程都無法避免!是curl訪問https網站的時候有bug!

  記憶體泄露可以通過linux的top命令發現,使用php函數memory_get_usage()不會發現。

  經過反覆調試找到解決辦法,curl配置添加如下幾項解決問題:

  代碼如下:

  [CURLOPT_HTTPPROXYTUNNEL] = true;

  [CURLOPT_SSL_VERIFYPEER] = false;

  [CURLOPT_SSL_VERIFYHOST] = false;

  CURLOPT_HTTPPROXYTUNNEL具體說明stackoverflow上有,直接貼原文:

  Without CURLOPT_HTTPPROXYTUNNEL

  Without CURLOPT_HTTPPROXYTUNNEL : You just use the proxy address/port as a destination of your HTTP request. The proxy will read the HTTP headers of your query, forward your request to the destination (with your HTTP headers) and then write the response to you.

  Example steps :

  1)HTTP GET /index.html sent to 1.1.1.1 (proxy)

  2)1.1.1.1 receive request and parse header for getting the final destination of your HTTP request.

  3)1.1.1.1 forward your query and headers to www.site.com (destination in request headers).

  4)1.1.1.1 write back to you the response receive from www.site.com

  With CURLOPT_HTTPPROXYTUNNEL

  With CURLOPT_HTTPPROXYTUNNEL : You ask the proxy to open a direct binary connection (like HTTPS, called a TCP Tunnel) directly to your destination by doing a CONNECT HTTP request. When the tunnel is ok, the proxy write you back a HTTP/1.1 200 Connection established. When it received your browser start to query the destination directly : The proxy does not parse HTTP headers and theoretically does not read tunnel datas, it just forward it, thats why it is called a tunnel !

  Example steps :

  1)HTTP CONNECT sent to 1.1.1.1

  2)1.1.1.1 receive HTTP CONNECT and get the ip/port of your final destination (header field of HTTP CONNECT).

  3)1.1.1.1 open a TCP Socket by doing a TCP handshake to your destination 2.22.63.73:80 (ip/port of www.site.com).

  4)1.1.1.1 Make a tunnel by piping your TCP Socket to the TCP Socket opened to 2.22.63.73:80and then write you back HTTP/1.1 200 Connection established witch means that your client can now make your query throw the TCP Tunnel (TCP datas received will be transmited directly to server and vice versa).

 

  http://stackoverflow.com/questions/12288956/what-is-the-curl-option-curlopt-httpproxytunnel-means

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.