TCHAR szAppName[24];
GetWindowText(szAppName,24);
HINTERNET hInternet=InternetOpen(szAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if(!hInternet)
{
MessageBox(_T("Internet handle open failed!"));
return;
} HINTERNET hConnect=InternetConnect(hInternet,_T("192.168.0.23"),8085,NULL,NULL,INTERNET_SERVICE_HTTP,0,0); if(!hConnect)
{
MessageBox(_T("Internet handle connect failed!"));
InternetCloseHandle(hInternet);
return;
}
LPCWSTR pAccept=_T("text/*"); const TCHAR *pBf[2];
pBf[0]=pAccept;
pBf[1]=NULL;
HINTERNET hRequest=::HttpOpenRequest(hConnect,_T("GET"),NULL,_T("HTTP/1.1"),0,pBf,0,0); if(!hRequest)
{
MessageBox(_T("Internet handle request failed!"));
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return;
}
TCHAR szRequest[]=_T("CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8 14:52:01"); UINT ln=wcslen(szRequest);
BOOL b=::HttpSendRequest(hRequest,0,0,szRequest,ln);
DWORD err=GetLastError();
DWORD dwLen,len=4;
b=::HttpQueryInfo(hRequest,HTTP_QUERY_CONTENT_LENGTH|HTTP_QUERY_FLAG_NUMBER,(LPVOID)(&dwLen),&len,0);
err=GetLastError();
char bf[10*1024]={0};
DWORD rd;
InternetReadFile(hRequest,bf,sizeof(bf),&rd);        SetDlgItemTextA(this->GetSafeHwnd(),IDC_RICHEDIT21,bf); InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);发送的完成链接是http://192.168.0.23:8085/?CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8 14:52:01
但实际服务器收到的是http://192.168.0.23:8085/后面的内容没有了,真是奇怪,郁闷了好多天,查了好多资料,网上的人似乎都没遇到过这样的问题的。

解决方案 »

  1.   

    http://topic.csdn.net/u/20090511/10/354d0c51-27bc-4356-8827-ab0e5d1dc3eb.html用我的code 试验一下
    过去我们还有 https 不成功的时候
      

  2.   


    hConnect,_T("GET"),NULL  Get 有大小限制
    用 post
    我的那个是 微软的 提供的, 后面的一个 帖子 有2段代码 
      

  3.   

    用POST早试过了,也还一样啊。
      

  4.   

    换POST方式呢?getlasterr()返回有错吗
      

  5.   

    GetLastError返回的是超时,这是因为我们自己的做服务器对于没有匹配的请求没有回应的缘故。
    因为数据是发送出去的,只是少了内容部分,所以HttpSendReuqest是成功的,唯独不能解释为何lpOptional这个参数没有被发送出去。
      

  6.   

    服务器 接受 不会有问题吧付一个我那个程序的 测试 程序IIS的// file  name : ReadAll.asp<%@ LANGUAGE="VBSCRIPT" %>
    <% 
       'Increase Script Timeout to 10 hours
       Server.ScriptTimeout = 36000   'Get size of POST data
       PostSize = Request.TotalBytes   'Read POST data in 1K chunks
       BytesRead = 0
       For i = 1 to (PostSize/1024)
         ReadSize=1024
         PostData = Request.BinaryRead(ReadSize)
         BytesRead = BytesRead + ReadSize
       Next
       
       'Read remaining fraction of 1K
       ReadSize=TotalBytes - BytesRead
       If ReadSize <> 0 Then
         PostData = Request.BinaryRead(ReadSize)
         BytesRead = BytesRead + ReadSize
       End If   ' Send results back to client
       Response.Write BytesRead
       Response.Write " bytes were read."
    %>
      

  7.   

    我在客户端上用抓包工具看了一下,发现发出之前的URL里就没有后面部分
      

  8.   

    我找到问题了,我对HTTP协议不太熟悉,又被一些网上的文章误导了。
    在此共享一下:对于我的那句请求,http://192.168.0.23:8085/?CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8 14:52:01 
    如果这样发送的话 HttpSendRequest(hRequest,NULL,0,_T("CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8 14:52:01 "),dwLen)
    其结果是
    GET / HTTP/1.1
    Accept: text/*
    User-Agent: Http2
    Host: 192.168.0.23:8085
    Content-Length: 92CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8 14:52:01 (这里可能为乱码)所以HttpSendReuqest的lpOptional参数为内容部分,但是并不是指CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8 14:52:01
    服务器需要的请求是这样的 
    GET /CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8%2014:52:01 HTTP/1.1
    Accept: text/*
    User-Agent: Http2
    Host: 192.168.0.23:8085
    Content-Length: 92所以/CMDID=CGETDEVTYPE&TIMESTAMP=2009-5-8%2014:52:01 应该当做需要查找的文档,在HttpOpenRequest的时候加入。
      

  9.   

    https://127.0.0.1/timehouse/m.php?AT=myaction  这样的 如何 post啊