这里我有一个代码片段,当我使用IP地址时不起作用。但是在MSDN中它说参数可以是点分十进制IP地址,所以它必须清楚地工作。怎么了?谢谢。
#include "stdafx.h"
#include <windows.h>
#include <wininet.h>
#include <tchar.h>
#include <iostream>
#pragma comment(lib,"wininet.lib")
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char szServer[] = "127.0.0.1";
char szUrl[] = "/test/upload.php";
char Data[] = "text123";
char szHdrs[] = "Content-Type: multipart/form-data; boundary=AaB03x";
char szTead[] = "--AaB03x\r\n"
"Content-Disposition: form-data; name=\"file\"; filename=\"test.txt\"\r\n"
"Content-Type: application/octet-stream\r\n"
"\r\n";
char szTail[] = "\r\n"
"--AaB03x--\r\n";
char szUserAgent[] = "MyUA";
char *szTypes[] = {"*/*", NULL};
HINTERNET hIOpen = InternetOpenA(szUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(!hIOpen)
{
printf("InternetOpenA Error\n");
}
HINTERNET hIConnect = InternetConnectA(hIOpen, szServer, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
if(!hIConnect)
{
printf("InternetConnectA Error\n");
}
HINTERNET hHttpOpReq = HttpOpenRequestA(hIConnect, "POST", szUrl, NULL, NULL, (LPCSTR *)szTypes, 0, 1);
if(!hHttpOpReq)
{
printf("HttpOpenRequestA Error\n");
}
BOOL bHttpSendReq = HttpSendRequestA(hHttpOpReq, szHdrs, strlen(szHdrs), Data, strlen(Data));
if (!bHttpSendReq)
{ int Error = GetLastError();
printf("HttpSendRequest Error %d\n", Error);
}
system("pause");
return 0;
}
我可以添加更多内容,实际上是关于这个问题。我使用的是Windows 7 x64 Ultimate和VS2008。
现在我在其他XP和Seven机器上检查了这个.exe。看起来它有效,但不在我的机器上。也许问题是(在那里)其他地方。
答案 0 :(得分:0)
三个提示:
将以下标记添加到您的internetconnect:
INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_NO_CACHE_WRITE
还要将http添加到您的要求:
char szServer [] =“http://127.0.0.1”;
您也可以尝试使用INTERNET_OPEN_TYPE_DIRECT而不是INTERNET_OPEN_TYPE_PRECONFIG
在我的代码库中我有一个解决12029错误的方法,但只有在文件下载期间连接丢失时才会发生 - 修复它我必须完全关闭所有WinInet句柄并重试下载。