[PHP] 使用curl擴充套件POST或者PUT時資料不全和連線中斷的排查
阿新 • • 發佈:2020-10-14
在專案中使用到了curl擴充套件進行PUT傳遞資料到另一個介面,但是看到的現象是有時候偶發資料是空的 .
這個時候就使用了tcpdump命令來檢視連線情況
具體命令是下面 , 另一個介面的埠號是8025:
tcpdump -i any port 8025 -l -s 0
可以看到在我請求對方時出現下面這個TCP標誌位 , R RST是中斷連線
Flags [R], seq 1525906647, win 0, length 0
這就說明是我這邊的問題, 我這邊中斷了連線
排查程式碼看到了有設定超時時間
public function setTimeout($timeout) {if (is_null($timeout)) { return; } $t = intval($timeout); if ($t >= 0 && $t < ini_get('default_socket_timeout')) { $this->timeout = $t; } }
最終設定的是curl擴充套件的配置超時時間項
if ($this->timeout > 0) { $opts[CURLOPT_TIMEOUT]= $this->timeout; }
當我設定的超時時間超過php.ini中default_socket_timeout 60秒時 , 就使用這個類裡面的預設的超時時間 , 而類裡面寫的是2秒
因此引發了上面連線中斷的問題.