Simulate a Form POST Request Using WinInet (轉)
這是MSDN中的一篇文章,說的是用Win來模擬表單的傳送,用的是VC及SDK兩種方法實現的,用文中方法便可以實現直接將表單傳送到上了,比直接在網頁上填表高明多了。
原文較短且很簡單,就沒翻譯,直接帖上來了,沒弄明白MSDN中的算轉帖還是算收藏,反正哪位仁兄能用上就行了
HOWTO: Simulate a FoPOST Request Using WinInet
Last reviewed: February 10, 1998Article ID: Q165298 The information in this article applies to:
- The Foundation Classes (MFC) included with: - Microsoft Visual C++, 32-bit Editions, versions 4.2, 5.0
- Microsoft Internet Client SDK, versions 4.0, 4.01
SUMMARY
To proy simulate a Form submission using WinInet, you need to send a header that indicates the proper Content-Type. For Forms, the proper Content-Type header is:
Content-Type: application/x-www-form-urlencoded
MORE INFORMATION
In many cases, the server does not respond appropriately if a Content-Type is not specified. For example, the Active Server Pages component of 3.0 actually checks this header specifically for 'application/x-www-form- urlencoded' before adding form variables to the "Request.Form" . This MIME/Content-Type indicates that the data of the request is a list of URL- encoded form variables. URL-encoding means that space character (ASCII 32) is encoded as '+', special character such '!' encoded in hexadecemal form as '%21'.
Here is a snippet of code that uses the MFC WinInet classes to simulate a Form POST request:
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // URL-encoded form variables - // name = "John Doe", userid = "hithere", other = "P&Q" CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q"); CInternetSession session; CHttpConnection* pConnection = session.GetHttpConnection(_T("ServerNameHere")); CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("FormActionHere")); BOOL result = pFile->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
Without MFC, the same code translates to straight SDK calls as follows:
static TCHAR hdrs[] = _T("Content-Type: application/x-www-form-urlencoded"); static TCHAR frmdata[] = _T("name=John+Doe&userid=hithere&other=P%26Q"); statuc TCHAR accept[] = _T("Accept: */*"); // for clarity, error-checking has been removed HINTERNET hSession = InternetOpen("MyAgent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", _T("FormActionHere"), NULL, NULL, accept, 0, 1); HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata)); // close any valid internet-handles
REFERENCES
For more information on URL-encoding and the format of a Form POST request, see section 8.2 in 1866.
Keys : AXSDKWinInet MfcMisc kbprg Technology : kbMfc Version : winnt:1.0 4.2 5.0 Platform : NT Issue type : kbhowto
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10796304/viewspace-951761/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- angularjs中$http模組傳送post請求request payload轉form dataAngularJSHTTPORM
- vb呼叫winInet API介面post資料到指定的url (轉)API
- form&method【POST~GET】ORM
- Django中的request.GET和request.POSTDjango
- python request.post異常Python
- Get和Post的用法,Request.QuerySt…
- A potentially dangerous Request.Form value was detected from the clientORMclient
- python request.post圖片和字典Python
- 【Flask】關於request.json /.values /.args /.formFlaskJSONORM
- iOS 使用form表單形式提交post請求iOSORM
- Simulate a loop in SQL【By hmxxyy】OOPSQL
- request的get和post引數亂碼問題
- Dynamics CRM Add/Remove a Tab in an entity form using plug-inREMORM
- post 提交 x-www-form-urlencoded 方式 inputStream 為空ORM
- axios傳送post請求,request.getParamter接收不到iOS
- php中$_REQUEST、$_POST、$_GET的區別和聯絡小結PHP
- HTTP請求中的Form Data與Request Payload的區別HTTPORM
- 關於http get和form表單post提交資料大小限制HTTPORM
- Servlet中request請求Get和Post方法以及亂碼解決Servlet
- form表單使用 btn submit-btn ajax-post方式提交問題。ORMMIT
- 記一次跨域post請求資料之preflight request跨域
- request.getParameter()與request.setAttribute()的區別(轉)
- C# 檔案下載 : WinINetC#
- 檢測到有潛在危險的Request.Form值解決辦法ORM
- 從客戶端檢測到有潛在危險的Request.Form值客戶端ORM
- beego Session main 在 ctx.Request.RequestURI放行一個get post 請求問題GoSessionAI
- Using a Virtual CListView with a Dynaset (轉)View
- ORA-07445: 出現異常錯誤: 核心轉儲 [kcbs_simulate()+5112]
- DLL檔案中Form的使用 (轉)ORM
- Win Form 的 Splitter 使用心得 (轉)ORM
- 關於 HTTP post 請求 form data 裡的特殊符號,比如加號 plus symbolHTTPORM符號Symbol
- Using WebLogic Server With Oracle RAC(轉)WebServerOracle
- Form產生時的事件次序; (轉)ORM事件
- 用weblogic的時候,遇到了 Cannot parse POST parameters of request的問題,請高手相助Web
- 從 Form1.Caption = “Hello World”說起 (轉)ORMAPT
- Redirecting Standard Input/Output using the Process Class (轉)
- [翻牆轉]Using Scala Implicits to Replace Mindless Delegation
- jquery 中$("form :input") $("form input") 區別jQueryORM