关于HTTP请求的问题

[复制链接]
查看11 | 回复2 | 2021-1-27 06:31:06 | 显示全部楼层 |阅读模式
问题描述:
特征1.本人有一台wince设备,通过蓝牙模块与手机链接之后,可以共享手机的网络资源,从而在我的wince设备上可以利用浏览器正常的访问各网页,同时我用ms自带的WinInetAPI去访问一个远端的http服务(命名为AServer),数据也是可以正常下载的。
特征2.利用的同样的wince设备,现在我这边有一个独立的modem通过usb的链接,同样可以正常的利用浏览器去访问各网页,但是我们用ms自带的WinInetAPI去访问Aserver的时候总是以失败结束。
注:1.手机跟modem的网络都是联通的3G网络
2.modem其实就跟手机内部的网络模块一样,支持电话、短信、网络服务。
3.modem首先由wince系统启动,激活器驱动,初始化,然后利用usb,wince与modem之间进行数据交互。
4.在特征2中,利用WinSock2API进行tcp链接的测试,发现socket通信是可以正常链接的。
5.经测试在特征2中利用浏览器是可以正常访问Aserver服务器上的主页的,说明中间并没有防火墙。
问题来了:
1.特征1与特征2中都可以正常的通过浏览器浏览网页,但为什么特征1下,可以正常访问远端服务,而特征2下是失败的。
2.在问题1的基础上,深入问题看,为什么浏览器都可以访问网络,而自写的软件访问却出现失败。
3.在深入看,Aserver在浏览器上都已经可以访问了,而调用api访问却出现问题,难道中间有什么特殊参数设置。

各位大牛,有什么独到的见解,不妨指点小弟一二。
小弟在此先一一谢过!

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:31:06 | 显示全部楼层
给出代码如下
HINTERNETm_hNetOpen=InternetOpen(_T("HttpTest1"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if(!m_hNetOpen)
{
#ifdefWINCE_TELEMATICS
RETAILMSG(1,(TEXT("hNetOpenwasnull,pleasecheckedtheinternet!\n")));
#else
TRACE(_T("hNetOpenwasnull,pleasecheckedtheinternet!\n"));
#endif
return;
}
HINTERNETm_hNetConn=InternetConnect(m_hNetOpen,_T("www.xxx.com"),80,_T(""),_T(""),INTERNET_SERVICE_HTTP,0,1);
//HINTERNETm_hNetConn=InternetConnect(m_hNetOpen,_T("www.xxx.com"),80,_T(""),_T(""),INTERNET_SERVICE_HTTP,0,1);
if(!m_hNetConn)
{
#ifdefWINCE_TELEMATICS
RETAILMSG(1,(TEXT("hNetConnwasnull,pleasecheckedtheservices\n")));
#else
TRACE(_T("hNetConnwasnull,pleasecheckedtheservices\n"));
#endif
return;
}
LPCWSTRl_lpcwDirName=_T("/xx/xx");
LPCWSTRl_lpcwAcceptTypes[2]={_T("text/binary"),NULL};
HINTERNETl_hNetSession=HttpOpenRequest(m_hNetConn,_T("Get"),l_lpcwDirName,_T("HTTP/1.1"),NULL,l_lpcwAcceptTypes,
INTERNET_FLAG_EXISTING_CONNECT,1);
//HINTERNETl_hNetSession=HttpOpenRequest(m_hNetConn,_T("Get"),NULL,_T("HTTP/1.1"),NULL,l_lpcwAcceptTypes,
//INTERNET_FLAG_EXISTING_CONNECT,1);
if(!l_hNetSession)
{
#ifdefWINCE_TELEMATICS
RETAILMSG(1,(TEXT("l_hNetSessionwasnull,pleasechecktheurl!\n")));
#else
TRACE(_T("l_hNetSessionwasnull,pleasechecktheurl!\n"));
#endif
return;
}
charcityType=xx;
WCHARl_wstrHead[100]={0};
wsprintf(l_wstrHead,_T("CONTENT_LENGTH:%d"),0);
charl_pBody[50]={0};
memcpy(l_pBody,"xxxxxxxxxxxxx",32);
memcpy(l_pBody+32,&cityType,1);

if(HttpSendRequest(l_hNetSession,l_wstrHead,wcslen(l_wstrHead),l_pBody,33))
//if(HttpSendRequest(l_hNetSession,l_wstrHead,wcslen(l_wstrHead),NULL,0))
{
#ifdefWINCE_TELEMATICS
RETAILMSG(1,(TEXT("httptestsuccess!\n")));
#else
TRACE(_T("httptestsuccess!\n"));
#endif
}
else
{
#ifdefWINCE_TELEMATICS
RETAILMSG(1,(TEXT("httptesterror!\n")));
#else
TRACE(_T("httptesterror!\n"));
#endif
}
intiResultBufferSize=10000;
charl_cstrResultBuffer[10000]={0};
intl_iRecvSize=0;
intl_iCompletedSize=0;
while(true)
{
BOOLbResult=InternetReadFile(l_hNetSession,(LPVOID)(l_cstrResultBuffer+l_iCompletedSize),
iResultBufferSize-l_iCompletedSize,(DWORD*)&l_iRecvSize);//iResultBufferSize-l_iCompletedSize
if(l_iRecvSize<=0)
{
break;
}
l_iCompletedSize+=l_iRecvSize;
}

#ifdefWINCE_TELEMATICS
RETAILMSG(1,(TEXT("[size:%d,value:%s]!\n"),l_iCompletedSize,l_cstrResultBuffer));
#else
TRACE(_T("[size:%d,value:%s]!\n"),l_iCompletedSize,l_cstrResultBuffer);
#endif
InternetCloseHandle(m_hNetConn);
InternetCloseHandle(m_hNetOpen);
InternetCloseHandle(l_hNetSession);
回复

使用道具 举报

千问 | 2021-1-27 06:31:06 | 显示全部楼层
上面的源码中关键服务名都用“xxx”代替,请不要理解错了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行