1. 程式人生 > >使用WinINet和WinHTTP實現Http訪問

使用WinINet和WinHTTP實現Http訪問

{
214    HINTERNET hSession = 0;
215    HINTERNET hConnect = 0;
216    HINTERNET hRequest = 0;
217    CStringW strHeader(L"Content-type: application/x-www-form-urlencoded\r\n");
218
219    // Test data220    CrackedUrl crackedUrl(L"http://www.easy-creator.net/test2/add.asp");
221    CStringA strPostData("value1=10&value2=14");
222

223    // Open session.224    hSession = OpenSession(L"HttpPost by [email protected]");
225    if (hSession == NULL) {
226        printf("Error:Open session!\n");
227        return -1;
228    }

229
230    // Connect.231    hConnect = Connect(hSession, crackedUrl.GetHostName(), crackedUrl.GetPort());
232    if
 (hConnect == NULL) {
233        printf("Error:Connect failed!\n");
234        return -1;
235    }

236
237    // Open request.238    hRequest = OpenRequest(hConnect, L"POST", crackedUrl.GetPath(), crackedUrl.GetScheme());
239    if (hRequest == NULL) {
240        printf("Error:OpenRequest failed!\n");
241        return
 -1;
242    }

243
244    // Add request header.245    if (!AddRequestHeaders(hRequest, strHeader)) {
246        printf("Error:AddRequestHeaders failed!\n");
247        return -1;
248    }

249
250    // Send post data.251    if (!SendRequest(hRequest, (const char*)strPostData, strPostData.GetLength())) {
252        printf("Error:SendRequest failed!\n");
253        return -1;
254    }

255
256    // End request257    if (!EndRequest(hRequest)) {
258        printf("Error:EndRequest failed!\n");
259        return -1;
260    }

261
262    char szBuf[BUF_SIZE];
263    DWORD dwSize = 0;
264    szBuf[0] = 0;
265
266    // Query header info.267#ifdef USE_WINHTTP
268    int contextLengthId = WINHTTP_QUERY_CONTENT_LENGTH;
269    int statusCodeId = WINHTTP_QUERY_STATUS_CODE;
270    int statusTextId = WINHTTP_QUERY_STATUS_TEXT;
271#else
272    int contextLengthId = HTTP_QUERY_CONTENT_LENGTH;
273    int statusCodeId = HTTP_QUERY_STATUS_CODE;
274    int statusTextId = HTTP_QUERY_STATUS_TEXT;
275#endif
276    dwSize = BUF_SIZE;
277    if (QueryInfo(hRequest, contextLengthId, szBuf, &dwSize)) {
278        szBuf[dwSize] = 0;
279        printf("Content length:[%s]\n", szBuf);
280    }

281
282    dwSize = BUF_SIZE;
283    if (QueryInfo(hRequest, statusCodeId, szBuf, &dwSize)) {
284        szBuf[dwSize] = 0;
285        printf("Status code:[%s]\n", szBuf);
286    }

287
288    dwSize = BUF_SIZE;
289    if (QueryInfo(hRequest, statusTextId, szBuf, &dwSize)) {
290        szBuf[dwSize] = 0;
291        printf("Status text:[%s]\n", szBuf);
292    }

293
294    // read data.295    for (;;) {
296        dwSize = BUF_SIZE;
297        if (ReadData(hRequest, szBuf, dwSize, &dwSize) == FALSE) {
298            break;
299        }

300
301        if (dwSize <= 0) {
302            break;
303        }

304
305        szBuf[dwSize] = 0;
306        printf("%s\n", szBuf);    //Output value = value1 + value2307    }

308
309    CloseInternetHandle(hRequest);
310    CloseInternetHandle(hConnect);
311    CloseInternetHandle(hSession);
312
313    return 0;
314}

相關推薦

使用WinINetWinHTTP實現Http訪問

{214    HINTERNET hSession = 0;215    HINTERNET hConnect = 0;216    HINTERNET hRequest = 0;217    CStringW strHeader(L"Content-type: application/x-www-form

C++程式設計筆記:使用WinHTTP實現HTTP訪問(解決接收UTF8資料亂碼問題)

實現HTTP訪問的流程包括以下幾步: 1, 首先我們開啟一個Session獲得一個HINTERNET session控制代碼; 2, 然後我們使用這個session控制代碼與伺服器連線得到一個HINTERNET connect控制代碼; 3, 然後我們使用

libeventlibcurl實現httphttps伺服器 cJSON使用

  前言   libevent和libcurl都是功能強大的開源庫;libevent主要實現伺服器,包含了select、epoll等高併發的實現;libcurl實現了curl命令的API封裝,主要作為客戶端。這兩個開源庫的安裝可以參考我的這篇部落格:https://www.cnblogs.com/liudw

SpringBoot配置HTTPS,並實現HTTP訪問自動轉HTTPS訪問

這裡說一下為什麼寫這篇文章,因為我也是一個SpringBoot初學者,在配置https的時候遇到了一些坑,根據網上的配置方式,發現一些類已經過時,這裡僅以記錄一下我的配置過程,以供參考. 1.使用jdk自帶的 keytools 建立證書 開啟cmd視窗,輸入如下命令 k

使用Zipkin Brave 實現http(springmvc)服務呼叫跟蹤(二)

上次講了Brave為Spring提供的Servlet攔截器(ServletHandlerInterceptor)及Rest(BraveClientHttpRequestInterceptor)模板的攔截器,向zipkin報告監控資料,其中,BraveClientHttpRe

使用nginx實現http訪問自動跳轉到https埠

作業系統:windows 2008 nginx版本:1.9.6 修改nginx的配置檔案:nginx.conf 在http{}中,新建一個server,如下的格式     server {         listen       80;         listen  

實現HTTP協議Get、Post檔案上傳功能——使用WinHttp介面實現

        在《使用WinHttp介面實現HTTP協議Get、Post和檔案上傳功能》一文中,我已經比較詳細地講解了如何使用WinHttp介面實現各種協議。在最近的程式碼梳理中,我覺得Post和檔案上傳模組可以得到簡化,於是幾乎重寫了這兩個功能的程式碼。因為Get、Pos

HTTP HTTPS POST GET(包含curl版本winhttp兩種實現)

玩過抓包,網路協議分析的朋友肯定都知道http https post get,web端和使用者的互動主要是通過post get完成的。今天帶給大家的是C++版本的http https get post,只會易語言的朋友請移步。我這裡有兩種實現:1:libcurl實現的CH

net core天馬行空系列:降低net core門檻,資料庫操作http訪問僅需寫介面,實現類由框架動態生成

引文   hi,大家好,我是三合。不知各位有沒有想過,如果能把資料庫操作和http訪問都統一封裝成介面(interface)的形式, 然後介面對應的實現類由框架去自動生成,那麼必然能大大降低工作量,因為不需要去寫很多重複的程式碼了,還有一個好處是,都是提供介面,我們把原來資料庫操作的部分,改成http訪問,對

Apache mod_rewrite實現HTTPHTTPS重定向跳轉

告訴 ace mod iter bing space tac lai contain 當你的站點使用了HTTPS之後,你可能會想把所有的HTTP請求(即端口80的請求),全部都重定向至HTTPS(即端口443)。這時候你可以用以下的方式來做到:(Apache mod_rew

CentOS7 nginx+tomcat實現代理訪問java web項目讓項目支持jspphp

default fault text serve auto direct dep web項目 ffi 首先配置:nginx # cd /etc/nginx/conf.d/ # cp default.conf tomcat.conf # nano tomcat.co

Golang裏實現Http服務器並解析header參數表單參數

打印 表單 class per lang accept png Go語言 title 在http服務裏,header參數和表單參數是經常使用到的,本文主要是練習在Go語言裏,如何解析Http請求的header裏的參數和表單參數,具體代碼如下: package server

Java以GETPOST方式實現HTTP通訊

 此程式可以建立HTTP通訊,分別以GET和POST方式向WEB伺服器提交資訊,並接收WEB伺服器返回的響應。 import java.io.*; import java.net.*; public class s311 { public static void main(S

Centos7 64bit Linux系統安裝SVN http訪問配置

第一步,更新源,並通過yum下載安裝svn [[email protected] ~]# yum update [[email protected] ~]# yum -y install subversion 安裝過程中,全部選擇同意(y)即可。 安裝完成會提示complet

C++:C語言實現HTTP的GETPOST請求例程參考 C++:C語言實現HTTP的GETPOST請求

C++:C語言實現HTTP的GET和POST請求   閱讀目錄   HTTP請求和IP/TCP   實現GET請求   實現POST請求:   參考: 回到頂部

golang 實現HTTP代理反向代理

代理的核心功能可以用一句話概括:接受客戶端的請求,轉發到後端伺服器,獲得應答之後返回給客戶端。下圖是 《HTTP 權威指南》一書中給出的圖例,可以很清晰地說明這一流程: 代理的功能有很多,事實上整個網際網路到處都充斥著代理伺服器。如果所有的 HTTP 訪問都是客戶端和伺

php 實現http getpost(提交json資料)請求

 介面,抓取資料經常用到 //$arr為提交的資料為json型別 預設 get function http_curl($url,$type='get',$res='json',$arr=''){ //1.初始化curl $ch = cu

java的知識點12——==equals方法、 super關鍵字、 繼承樹追溯、封裝的作用含義、封裝的實現—使用訪問控制符、封裝的使用細節

==和equals方法 “==”代表比較雙方是否相同。如果是基本型別則表示值相等,如果是引用型別則表示地址相等即是同一個物件。  Object 的 equals 方法預設就是比較兩個物件的hashcode,是同一個物件的引用時返回 true 否則返回 false。但是,我

php7實現httphttps請求web服務-通用工具類

前段時間做微信開發,因微信有眾多介面呼叫,因此自己整理了一套比較通用的工具類,用以做介面 呼叫,考慮到方便性和簡潔性,這裡選擇使用php的curl擴充套件庫來實現 1 curl啟用和apache的配置 先來看看網友們提供的眾多錯誤方法,本人被這些資料坑的太慘 了 (1)

用 Python 快速實現 HTTP FTP 伺服器

用 Python 快速實現 HTTP 伺服器 有時你需臨時搭建一個簡單的 Web Server,但你又不想去安裝 Apache、Nginx 等這類功能較複雜的 HTTP 服務程式時。這時可以使用 Python 內建的 SimpleHTTPServer 模組快速搭建一個簡單的 HTTP 伺服器。 Si