使用httpwebrequest請求別人的介面,請求了一次,但是對方卻收到了兩次同樣的請求,而且間隔時間為一分鐘,並且只有處理資料比較多的時候才會出現。
因為我自己的**裡是有設定超時時間的,且時間設定的是5分鐘, webrequest.timeout = 300000;
排查了很久,最後發現是因為對方使用的 nginx自身的機制裡面設定了1分鐘超時重發導致的,對方進行了介面處理優化,提高速度,並修改了超時時間,問題解決。
以下是我的httpwebrequest請求:
using system;
using system.collections.generic;
using system.configuration;
using system.io;
using system.io.compression;
using system.linq;
using system.net;
using system.net.security;
using system.security.cryptography.x509certificates;
using system.text;
using system.threading.tasks;
using jxlservice.apis.dto;
namespace jxlservice.utils
catch (webexception ex)
stream responsestream = webresponse.getresponsestream();
if (webresponse.contentencoding.tolower().contains("gzip"))
string responsestring = "";
using (streamreader reader = new streamreader(responsestream, encoding.utf8))
if (responsestring != null && responsestring.length > 0)
//else//}
else
";tresponse responseobj = jsonhelper.jsontoobject(res);
return responseobj;
//throw new exception("呼叫介面錯誤,沒有返回值");}}
///
/// 建立請求
///
/// 位址
request.headers.add(httprequestheader.acceptencoding, "gzip,deflate");//若支援壓縮 注意需要給在獲取響應時解壓
return request;
}///
/// https 校驗證書
///
///
///
///
///
///
private static bool checkvalidationresult(object sender, x509certificate certificate, x509chain chain, sslpolicyerrors errors)}}
HttpWebRequest傳送Post資料
其實傳送和get差不多需要額外多注意的是 2 傳送的url串需要自己拼接的,拼接後用ascii來解碼成byte的陣列傳送。偽 如下 string data username admin password 123456 byte bytes encoding.ascii.getbytes data r...
HttpWebRequest使用總結
httpwebrequest的keepalive預設是true,如果使用的時候僅僅只是關閉流,不關閉網絡卡上的通道的話,第二個請求在tcp沒有關閉的情況下是走同乙個通道,此時本機的tcp通道就會拋異常出來,這是本機拋的錯誤。所以除了關閉本機的io資源外,還要關閉網路資源。需要把keepalive設定...
HttpWebRequest程式設計相關問題階段總結
其實我遇到的最大問題是關於cookes的,而cookeis中,jspsessid導致的問題和domain導致的問題最嚴重。所以我就在想是不是apache中的外掛程式導致了jspsessionid的混亂?在asp.net中,當你用到session時,客戶端始終只有乙個sessionid,始終不變。而j...