1. 程式人生 > 實用技巧 >[PHP] 使用curl擴充套件POST或者PUT時資料不全和連線中斷的排查

[PHP] 使用curl擴充套件POST或者PUT時資料不全和連線中斷的排查

在專案中使用到了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秒

因此引發了上面連線中斷的問題.