使用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
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
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}
相關推薦
使用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
C++程式設計筆記:使用WinHTTP實現HTTP訪問(解決接收UTF8資料亂碼問題)
實現HTTP訪問的流程包括以下幾步: 1, 首先我們開啟一個Session獲得一個HINTERNET session控制代碼; 2, 然後我們使用這個session控制代碼與伺服器連線得到一個HINTERNET connect控制代碼; 3, 然後我們使用
libevent和libcurl實現http和https伺服器 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實現HTTP和HTTPS重定向跳轉
告訴 ace mod iter bing space tac lai contain 當你的站點使用了HTTPS之後,你可能會想把所有的HTTP請求(即端口80的請求),全部都重定向至HTTPS(即端口443)。這時候你可以用以下的方式來做到:(Apache mod_rew
CentOS7 nginx+tomcat實現代理訪問java web項目讓項目支持jsp和php
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以GET和POST方式實現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的GET和POST請求例程參考 C++:C語言實現HTTP的GET和POST請求
C++:C語言實現HTTP的GET和POST請求 閱讀目錄 HTTP請求和IP/TCP 實現GET請求 實現POST請求: 參考: 回到頂部
golang 實現HTTP代理和反向代理
代理的核心功能可以用一句話概括:接受客戶端的請求,轉發到後端伺服器,獲得應答之後返回給客戶端。下圖是 《HTTP 權威指南》一書中給出的圖例,可以很清晰地說明這一流程: 代理的功能有很多,事實上整個網際網路到處都充斥著代理伺服器。如果所有的 HTTP 訪問都是客戶端和伺
php 實現http get和post(提交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實現http和https請求web服務-通用工具類
前段時間做微信開發,因微信有眾多介面呼叫,因此自己整理了一套比較通用的工具類,用以做介面 呼叫,考慮到方便性和簡潔性,這裡選擇使用php的curl擴充套件庫來實現 1 curl啟用和apache的配置 先來看看網友們提供的眾多錯誤方法,本人被這些資料坑的太慘 了 (1)
用 Python 快速實現 HTTP 和 FTP 伺服器
用 Python 快速實現 HTTP 伺服器 有時你需臨時搭建一個簡單的 Web Server,但你又不想去安裝 Apache、Nginx 等這類功能較複雜的 HTTP 服務程式時。這時可以使用 Python 內建的 SimpleHTTPServer 模組快速搭建一個簡單的 HTTP 伺服器。 Si