WinHTTP開發POST表單的問題及解決
利用WinHTTP編寫訪問WEB頁面的客戶端,如果需要POST表單,比如輸入登陸的使用者名稱和密碼等等,以後的頁面訪問都和這個登陸的Session有關。IE瀏覽器等客戶端利用從伺服器端獲得的Cookie儲存相關資訊實現會話的一致性,具體到WinHTTP開發,查了一下,網上沒有太多相關資料,下面函式利用Get掩飾向一個網站獲取Cookie的ID號,儲存到CString中,以後的Get等操作,都利用WinHttpAddRequestHeaders將Cookie新增到Header中,然後在進行Request操作即可:
CStringW GetCookie()
{
CStringW strCookie = L"";
DWORD dwSize = 0;
LPVOID lpOutBuffer = NULL;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( SZ_AGENT,
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0 );
// Specify an HTTP server.
if( hSession )
hConnect = WinHttpConnect( hSession, L"wapmail.webdunia.com",
INTERNET_DEFAULT_HTTP_PORT, 0 );
// Create an HTTP request handle.
if( hConnect )
hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0 );
// Send a request.
if( hRequest )
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS, 0,
WINHTTP_NO_REQUEST_DATA, 0,
0, 0 );
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// First, use WinHttpQueryHeaders to obtain the size of the buffer.
if (bResults)
{
WinHttpQueryHeaders( hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF,
WINHTTP_HEADER_NAME_BY_INDEX, NULL,
&dwSize, WINHTTP_NO_HEADER_INDEX);
// Allocate memory for the buffer.
if( GetLastError( ) == ERROR_INSUFFICIENT_BUFFER )
{
lpOutBuffer = new WCHAR[dwSize/sizeof(WCHAR)];
// Now, use WinHttpQueryHeaders to retrieve the header.
bResults = WinHttpQueryHeaders( hRequest,
WINHTTP_QUERY_RAW_HEADERS_CRLF,
WINHTTP_HEADER_NAME_BY_INDEX,
lpOutBuffer, &dwSize,
WINHTTP_NO_HEADER_INDEX);
}
}
// Print the header contents.
char * tmpch = (char *)malloc(sizeof(lpOutBuffer));
if (bResults)
sprintf(tmpch,"%S",lpOutBuffer);
strCookie = tmpch;
int set_cookie = strCookie.Find(L"Cookie",0);
int semicolon = strCookie.Find (L";",set_cookie);
if(set_cookie != -1 && semicolon != -1)
strCookie = strCookie.Mid (set_cookie,semicolon - set_cookie) + L"/r/n";
// Free the allocated memory.
delete [] lpOutBuffer;
// Report any errors.
if (!bResults)
printf("Error %d has occurred./n",GetLastError());
// Close any open handles.
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);
return strCookie;
}
相關推薦
WinHTTP開發POST表單的問題及解決
利用WinHTTP編寫訪問WEB頁面的客戶端,如果需要POST表單,比如輸入登陸的使用者名稱和密碼等等,以後的頁面訪問都和這個登陸的Session有關。IE瀏覽器等客戶端利用從伺服器端獲得的Cookie儲存相關資訊實現會話的一致性,具體到WinHTTP開發,查了一下,網
Angular開發(十一)-關於響應式表單及表單的校驗
一、響應式表單定義 響應式表單:我們在元件中建立表單控制元件的物件樹,並使用特定的方式將繫結到元件模板中的原聲表單控制元件元素上 二、響應式表單的好處 我們可以在元件類中直接建立
第三篇:開發中的問題及解決方式
.text cat 彈窗 ret 如何 配置 中項 新的 顯示 1.texarea 如何保存空格、換行? 答:var content1= $("#content").val(); var content =content1.replace(/\n|\r\n/g,"&
利用ajax異步處理POST表單中的數據
利用 tex oda checkbox nbsp st表 success target .ajax //防止頁面進行跳轉 $(document).ready(function(){ $("#submit").click(function(
C# Asp.net使用FormData對象實現ajax提交表單及上傳圖片
sync ext syn data .... error post req 序列化 1、html代碼: <form id="postForm"> 文件名:<input type="text" name="filename" />
ios系統web(微信公眾號)開發遇到的問題及解決方案
編輯 doc pretty ram body abs 系統 stc 大神 1.1. 頁面滾動不流暢(2017-09-25) 現象: 網頁豎向滾動或橫向滾動不流暢。 解決方案: 為滾動元素添加css樣式: -webkit-overflow-scrolling: tou
鎖表原因及解決思路
data- 操作數 -m mit sdn 事物 i/o 之間 art 1、鎖表發生在insert update 、delete 中 2、鎖表的原理是 數據庫使用獨占式封鎖機制,當執行上面的語句時,對表進行鎖住,直到發生commite 或者 回滾 或者退出數據庫用戶
Ajax的post表單,不在url後接一大串參數鍵值對的方法
url efault opp 解決方案 數值 .cn 寫上 prevent sub $(‘#loginForm‘).on(‘submit‘,function (ev) { //阻止表單參數附在url後面 ev.stopPropagation
FormData物件提交表單及上傳圖片/檔案
1.建立一個FormData空物件,然後使用append方法新增key/value var formdata = new FormData(); formdata.append('name','fdipzone'); formdata.append('gender','male');
表單及控制元件
表單及控制元件 1、常用屬性 action,指定提交的地址 method,指定提交的方式,一般為get或post get方式請求:1、直接輸入地址訪問。2、表單沒有設定method時或設的為get,都是get方式的請求。get方式請求會將請求引數的名和
curl post表單上傳檔案(C++)
最近測試如何上傳檔案到伺服器。原來傳照片一致通過binary 形式傳檔案,或者把圖片base64編碼傳圖片。一致沒有用form-data 表單形式傳送資料,今天嘗試下如何使用libcurl提供的API上傳檔案。 Sample code: #include <
Ajax應用serialize()提交Form表單及後端取值(Java)
<script type="text/javascript"> $(document).ready(function(){ $("#modifyForm").submit(function(e){ $("#submitButton").attr('disabled',"
SpringSecurity開發基於表單的認證
核心功能 認證(你是誰) 授權(你能幹什麼) 攻擊防護(防止偽造身份) 一組過濾器鏈 //所有請求都需要認證 幾乎是預設的 @Configuration public class BrowserSecurityConfig extends WebSecu
Spring MVC 接收POST表單請求,獲取引數總結
前段時間遇到一個問題,在spring mvc 服務端接收post請求時,通過html 表單提交的時候,服務端能夠接收到引數的值。但是使用httpclient4.3構造post請求,卻無法接收到引數的值。spring 程式碼: @RequestMapping(value
JavaScript第二課-表單及兩種資料提交方式
1、表單標籤 <legend>註冊區域</legend> <form action="http://www.baidu.com"> 使用者名稱: <input type="text"/ name="user" ><br/
Flask Web 開發 web表單
hello.py:定義表單類 from flask.ext.wtf import Form from wtforms import StringField, SubmitField from wtforms.validators import Required cla
java 後臺模擬post表單請求傳送key-value資料亂碼
首先是key-value的模型: public class PostValue { private String key; private String value; public PostValue(String key, S
學習:從零玩轉HTML5前端+跨平臺開發(表單標籤-非input標籤(掌握))
form表單標籤 <form action = "提交到伺服器地址"> <表單元素> </form>常見的表單元素 <input type = "text" name = "username"> 明文輸入框
iOS開發專案BUG彙總及解決方案(持續更新)
一.用Cocoapods新增第三方類庫出現‘XCTest/XCTest.h’file not found 1、點選Pods - TARGETS -[Pods-你的專案名Tests-Specta]-Build Settings ,搜尋Framework sear
使用FormData物件提交表單及上傳圖片
FormData 物件,可以把form中所有表單元素的name與value組成一個queryString,提交到後臺。在使用Ajax提交時,使用FormData物件可以減少拼接queryString的