据统计90%查看本帖的人,都已经注册本站了哦
您需要 登录 才可以下载或查看,没有账号?立即注册
×
其实我是根据精易模块开源的思路写的 其实差不多 你可以认为是C++的翻译版,效率比易语言执行起来要快 顺手拿走吧
string Web_Visit(char * url, int mode, char *data, string setcookie)
{
string Str_url = url;
bool https;
char *VisitMode;
char *user_Agent;
int RequestSign;
string Domain = GetDomain(url);
string header = "Accept: */*\nReferer:" + Str_url + "\nAccept-Language: zh-cn\nContent-Type: Application/x-www-form-urlencoded";
if ("" != setcookie)
{
header = header + "\nCookie: " + setcookie;
}
char *Cdomain = (char*)Domain.c_str();
if (0 == mode)
{
VisitMode = "GET";
}
else if (1 == mode)
{
VisitMode = "post";
}
else
{
VisitMode = "GET";
}
if ("https" == Str_url.substr(0, 5))
{
https = true;
}
else
{
https = false;
}
user_Agent = "Mozilla / 4.0 (compatible; MSIE 9.0; Windows NT 6.1)";
HINTERNET hInternet = InternetOpenA(user_Agent, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); //初始化WinINet
if (NULL == hInternet)
{
InternetCloseHandle(hInternet);
return "";
}
HINTERNET hConnect;
if (https)
{
hConnect = InternetConnectA(hInternet, Cdomain, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); //连接服务器
}
else
{
hConnect = InternetConnectA(hInternet, Cdomain, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); //连接服务器
}
if (NULL == hConnect)
{
InternetCloseHandle(hConnect);
return "";
}
RequestSign = INTERNET_FLAG_RELOAD | INTERNET_COOKIE_THIRD_PARTY;
if ("" != setcookie)
{
RequestSign = RequestSign | INTERNET_FLAG_NO_COOKIES;
}
if (https)
{
RequestSign = RequestSign | INTERNET_FLAG_SECURE;
}
else
{
RequestSign = RequestSign | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS;
}
string pageadd = GetPageAdd(url);
char *Cpageadd = (char*)pageadd.c_str();
HINTERNET hOpenRequest = HttpOpenRequestA(hConnect, VisitMode, Cpageadd, "HTTP / 1.1", NULL, NULL, RequestSign, 0); //创建http请求
if (NULL == hOpenRequest)
{
InternetCloseHandle(hOpenRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return "";
}
if (0 == mode)
{
char * Cheader = (char*)header.c_str();
//BOOL bRequest = HttpSendRequestA(hOpenRequest, header, (DWORD)strlen(header), NULL, (DWORD)0); //发送http请求
BOOL bRequest = HttpSendRequestA(hOpenRequest, Cheader, (DWORD)strlen(Cheader), NULL, (DWORD)0);
}
else if (1 == mode)
{
char * Cheader = (char*)header.c_str();
BOOL bRequest = HttpSendRequestA(hOpenRequest, Cheader, (DWORD)strlen(Cheader), data, (DWORD)strlen(data)); //发送http请求
}
char szBuffer[1024] = { 0 };
DWORD dwByteRead = 0;
string buf;
/*
FILE* fp = NULL;
fopen_s(&fp, "1.txt", "w");*/
while (InternetReadFile(hOpenRequest, szBuffer, sizeof(szBuffer), &dwByteRead) && dwByteRead > 0)
{
buf = buf + szBuffer;
//fwrite(szBuffer, dwByteRead, 1, fp);
ZeroMemory(szBuffer, dwByteRead);
}
//fclose(fp);
char backhead[5000];
DWORD LEN = sizeof(backhead);
HttpQueryInfoA(hOpenRequest, HTTP_QUERY_RAW_HEADERS_CRLF, backhead, &LEN, 0);
InternetCloseHandle(hOpenRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return buf;
}
直接从我项目里抠出来的代码。。喜欢C++的可以找我交流
|