2017-08-14 145 views
-2

我正在使用wininet使用HttpRequests。与Wininet崩溃

我尝试使httpRequest发送数据到本地Web服务器上的PHP文件。虽然它发送,但它遭受了沿线的崩溃。我的C++代码看起来像这样

#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 
#include <wininet.h> 

#define PAGE_NAME "order.php" 

#pragma comment (lib, "wininet") 


int main() 
{ 
    char firstname[50] = "John"; 
    char lastname[50] = "Darwin"; 
    char tel[50] = "08098688603"; 
    char idnumber[50] = "99057151"; 

    char* data = (char*)VirtualAlloc(NULL, 4052, MEM_COMMIT, PAGE_EXECUTE_READWRITE); 

    //lstrcpy(data, PAGE_NAME); 
    lstrcat(data, PAGE_NAME); 
    lstrcat(data, "?&firstname=%s"); 
    lstrcat(data, firstname); 
    lstrcat(data, "&lastname=%s"); 
    lstrcat(data, lastname); 
    lstrcat(data, "&tel=%s"); 
    lstrcat(data, tel); 
    lstrcat(data, "&idnumber=%s"); 
    lstrcat(data, (char*)idnumber); 

    HINTERNET hSession = InternetOpen("Vox", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
    if (hSession == NULL) 
     MessageBox(NULL, "Bad InternetOpen", "Error", MB_OK); 

    HINTERNET hConnect = InternetConnect(hSession, "localhost", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); 
    if (hConnect == NULL) 
     MessageBox(NULL, "Bad InternetConect", "Error", MB_OK); 

    HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", PAGE_NAME, NULL, NULL, (const char**)"text/*", 0, 1); 
    if (hRequest == NULL) 
     MessageBox(NULL, "Bad OpenRequest", "Error", MB_OK); 

    if (HttpSendRequestA(hRequest, "Content-Type: app1ication/x-www-form-urlencoded", strlen("Content-Type: app1ication/x-www-form-urlencoded"), data, strlen(data)) == NULL) 
     MessageBox(NULL, "Bad SendRequest", "Error", MB_OK); 

    else 
     MessageBox(NULL, "Data transfer Complete", "Sent Info", MB_ICONINFORMATION | MB_OK); 

    InternetCloseHandle(hRequest); 
    InternetCloseHandle(hConnect); 
    InternetCloseHandle(hSession); 



    return 0; 
} 

虽然它与完整的资料,PHP文件正确地发送,它在该行

HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", PAGE_NAME, NULL, NULL, (const char**)"text/*", 0, 1); 

崩溃,并显示错误

抛出异常的0x7504712A(wininet.dll)在ConsoleApplication1.exe中:0xC0000005:访问冲突读取位置0x74786574。

如果有这种异常的处理程序,程序可能会安全地继续。

我可能会错过什么,有什么我不正确?

+1

请不包括错误消息的图像,但作为文本,这提高了这一问题的可搜索性。 –

+0

我自己修复了。 –

回答

0

看来,如果接受类型的阵列没有被正确用NULL终场终止:

一个指针,指向字符串的空终止阵列,其指示客户端接受的媒体类型。这是一个例子。

​​

未能正确地终止与一个NULL指针阵列将导致崩溃。

See here.

+0

:)非常感谢你。确实是这样,我现在纠正了信息,它发送的信息没有崩溃。非常感谢。 – Nimo