[置顶] 【android】通过User-Agent,解决httppost从服务器上获取的数据不正确的问题

一、 问题描述

  • 本机上通过android的模拟器,在本机上搭建的tomcat服务器上成功获取到正确的数据,但是当将服务器的代码上传到虚拟主机时候,测试的时候,通过httppost发送请求,服务器回复是成功的,但是获取的数据却是下面莫名其妙的信息

<html><body><script>function eyfb_(dtqb_){var ydpb_,dzr_=new Array(),jlfb_="vaSV\xef_\xd9`\xb92\xd7\x07\x01\xda\x162\xb3\x88O
\x8d\x08\x87\xaa\xb0z\xde\x1b%\xc7\xd2\x08\x86M0n\x08\x27?\xefj\xb5\x9d5\x9f\xfe\xcf\xcc\xd0\xb3\xdc_\x1e\x12d\xbb\x86\x92\xb7Q
\xf7\x045\xbfIa\xa0\xf8\xf3\x95O!\xbeU\x80\x8bD\xb2\x14\x1c\xa3r\xee\x16<\xb8?\xb4\xf9\xbec";for(ydpb_=0;ydpb_<jlfb_.length;ydpb_++)dzr_[ydpb_]
=jlfb_.charCodeAt(ydpb_);ydpb_=87;for(;;){if(ydpb_<4)break;dzr_[ydpb_]=(dzr_[ydpb_]+dzr_[ydpb_-1])&0xff;ydpb_--;}ydpb_=85;while(true)
{if(ydpb_<1)break;dzr_[ydpb_]=(dzr_[ydpb_]-dzr_[ydpb_-1])&0xff;ydpb_--;}for(ydpb_=2;;){if(ydpb_>85)break;dzr_[ydpb_]=(dzr_[ydpb_]+dzr_[ydpb_+1])
&0xff;ydpb_++;}jlfb_="";for(ydpb_=1;ydpb_<dzr_.length-1;ydpb_++)if(ydpb_%7)jlfb_+=String.fromCharCode(dzr_[ydpb_]^dtqb_);eval(jlfb_);}
eyfb_(156);</script><br><br><br><center><h3><p>???????棬??????????????JavaScript</p><p>The browser needs JavaScript to continue</p></h3>
</center></body></html>

二、分析过程


1.  首先,分析是否服务器端返回的数据就是错误的,打开火狐的浏览器,输入地址(http://..../TestDir/Test),

期间开启wireshark抓包工具进行抓包,结果,浏览器中显示正确的数据,抓取的数据包也是正确的。


通过浏览器获取服务器数据请求包:

[置顶] 【android】通过User-Agent,解决httppost从服务器上获取的数据不正确的问题_第1张图片


通过浏览器获取服务器数据的回复包:

[置顶] 【android】通过User-Agent,解决httppost从服务器上获取的数据不正确的问题_第2张图片



2.  抓取从虚拟主机无法获取数据的网络包


从虚拟主机获取的错误的数据的请求包:

[置顶] 【android】通过User-Agent,解决httppost从服务器上获取的数据不正确的问题_第3张图片



从虚拟主机获取的错误的数据的回复包:

[置顶] 【android】通过User-Agent,解决httppost从服务器上获取的数据不正确的问题_第4张图片


3. 通过对上面数据包的分析,通过浏览器从虚拟主机获取的网络包,能够获取正确数据的请求包中包含了User-Agent,通过添加代码测试,问题得到解决


三、 解决办法


1.   httpclient 添加User-Agent的方式

private HttpPost httpPost;			            //创建一个HttpPost请求
private HttpResponse response;		                    //创建一个HttpResponse用于存放响应的数据
httpPost = new HttpPost(URL+"/WebStoriesWelcomeServlet");   //设置请求的路径
httpPost.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0"); //设置"User-Agent 
httpPost.setEntity(new StringEntity(data.toString()));      //设置请求体 
response = httpCilent.execute(httpPost);                    //执行请求获取响应


2. URLConnection添加User-Agent的方式

URL myURL = new URL(imagePath);
URLConnection ucon = myURL.openConnection();     //打开URL链接
ucon.setRequestProperty("User-agent","Mozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0"); //设置"User-Agent 
InputStream is = ucon.getInputStream();          //使用InputStreams,从URLConnection读取数据




你可能感兴趣的:(android,firefox,虚拟主机,HttpPost)