Heim  >  Artikel  >  Backend-Entwicklung  >  求解惑 , php向其它服务器请求时经常响应失败.该怎么解决

求解惑 , php向其它服务器请求时经常响应失败.该怎么解决

WBOY
WBOYOriginal
2016-06-13 10:21:421125Durchsuche

求解惑 , php向其它服务器请求时经常响应失败.
1 直接用file_get_contents 来实现
file_get_contents( $url );

2 使用curl 扩展.
 $ch = curl_init();
  $timeout = 30;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  $contents = trim(curl_exec($ch));
  curl_close($ch);

3 socket 套接.
$address = ' http://1.2.3.4:9001/';
$path = '/aaa/bbb';
$sock = fsockopen($address, 80, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");
$psw = md5('123.456');
$data = "xxx=xxx&yyy=yyy";
fwrite($sock, "POST $path HTTP/1.0\r\n");
fwrite($sock, "Host: localhost\r\n");
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
fwrite($sock, "Accept: */*\r\n");
fwrite($sock, "\r\n");
fwrite($sock, "$data\r\n");
fwrite($sock, "\r\n");
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$str\n";
$body = "";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
$body1 = explode("#",$body);
return $body1;

三种方式均效果缓慢。

直接输出 echo ""; 时正常.

上述代码均在for 循环中实际运行。下面的抓包的效果

之前访问都挺好的,最近,使用时,经常卡住。会报错
求各位朋友帮忙!

------解决方案--------------------
1、考虑是否 cookie 的影响
2、应该设置来路

都是内网地址,把图涂得那么乱干什么
------解决方案--------------------
源地址的网络不好?
------解决方案--------------------

探讨

感觉是明显被请求的地方,连接资源有限。有没有办法建立一个持久连接。需要的时候,用这个资源。 不用每次连接时,都去开一个资源。

------解决方案--------------------
探讨

感觉是明显被请求的地方,连接资源有限。有没有办法建立一个持久连接。需要的时候,用这个资源。 不用每次连接时,都去开一个资源。

------解决方案--------------------
连接太频繁了,疑似DOS攻击,进临时黑名单了。

直接用curl,请求keepalive即可。

CURLOPT_FRESH_CONNECT => false
CURLOPT_FORBID_REUSE => false

配置这两个选项即可,curl_exec之后不用关闭了,下次继续用。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn