(eg:基站定位)使用HttpClient模拟Http请求,获取返回结果

原创 2018年04月16日 14:39:24

先来看一下代码:

/**
 * 通过Lac和cell_id查询经度(longitude)和纬度(latitude)
 * @param lac LAC号码
 * @param cell_id cell_id号码
 * @return Map:key -- 经度:longitude
 *                     纬度:latitude
 *                     地址: address
 */
public Map queryLongitudeAndLatitude(String lac,String cell_id) throws IOException{

    Map<String,String> map = new HashMap<String,String>();

    // 生成一个httpclient对象,模拟http请求
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost("http://www.cellid.cn/m/cidInfo.php?lac=" + lac + "&cell_id=" + cell_id + "&hex=false&flag=2262433451");
    httpPost.setHeader("Accept:","*/*");
    httpPost.setHeader("Accept-Encoding:","gzip, deflate");
    httpPost.setHeader("Connection:","keep-alive");
    httpPost.setHeader("Origin:","http://www.cellid.cn");
    httpPost.setHeader("Referer:","http://www.cellid.cn/m/index.php");//Referer:很多网站如果我们直接访问可能会报非法访问,一般就是这个参数不存在引起的
    HttpResponse response = httpclient.execute(httpPost);
    InputStream fis = response.getEntity().getContent();
    
    //将内容写到StringBuilder中
    BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
    }
    fis.close();

    //地址被<br>标签包裹
    int a = sb.indexOf("<br>") + "<br>".length();
    int b = sb.lastIndexOf("<br>");
    //经纬度被coord和addressInfo包裹
    int c = sb.indexOf("coord=") + "coord=".length();
    int d = sb.lastIndexOf("&addressInfo");
    //获取经纬度
    String jw = sb.substring(c,d);

    String address = sb.substring(a,b); //地址
    String latitude = jw.substring(0,jw.indexOf(",")); //纬度
    String longitude = jw.substring(jw.indexOf(",") + 1); //经度

    map.put("address",address);
    map.put("latitude",latitude);
    map.put("longitude",longitude);

    return map;
}

对代码中的内容进行一些解释:

因为做的是基站定位相关的内容,所以访问的是我所需要的网站。

httpPost.setHeader("xxxx");

这里设置要根据我们具体要访问哪个网站来设置,F12开发者模式。抓取到请求信息,然后就可以根据请求信息里的内容来进行设置了。

代码中一直到fis.close();这一部分算是全部获取到了返回的response中的entity,接下来就可以按需求来获取值了。我这里需要地址及经纬度,所以获取了这部分的值。

看一下response.entity中有些什么,这样或许会更清楚我上面的代码是在做什么:

sb = {StringBuilder@1808}"基站:34860,62041<br>云南省西双版纳傣族自治州景洪市锦绣路<br><a href='../location.php?lac=34860&cellid=62041&coord=22.01436,100.752683&addressInfo=云南省西双版纳傣族自治州景洪市锦绣路' target='_blank'>(查看地图</a>)"


HttpClient多线程调用并返回值

新开发了一个汇总功能,为了组合数据的方便,所以接口提供非常小的粒度;但是因汇总是有多个时间、地理跨度、且查询数据量比较大,结果是200个请求查询时间非常缓慢,达到了413854毫秒,龟速!!! 研究...
  • ayanami001
  • ayanami001
  • 2015-09-24 11:07:44
  • 818

java使用HttpClient模拟发送http的get、post请求

Http请求类 public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * ...
  • hbxfyxw
  • hbxfyxw
  • 2017-05-31 22:49:59
  • 1003

HttpClient设置请求头模拟浏览器

之前的HelloWorld 爬虫一些特殊网站  package com.gcx.demo.HelloWorld2; import org.apache.http.HttpEntity; impor...
  • gcxzflgl
  • gcxzflgl
  • 2017-07-12 20:27:16
  • 1960

利用httpclient 模拟登录,获取登录后信息数据

本例使用httpclient 3.0.jar package test; import org.apache.commons.httpclient.Cookie; import org.apach...
  • chenzenan
  • chenzenan
  • 2013-01-15 15:32:02
  • 28001

HttpClient模拟get,post请求并发送请求参数(json等)

import java.io.IOException; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import or...
  • e_wsq
  • e_wsq
  • 2014-10-29 03:06:08
  • 2177

java代码实现如jsp页面的form请求方式二HttpClient

HttpClient请求时使用jar包 package com.test; import java.net.URLDecoder; import org.apache.commons...
  • strutce
  • strutce
  • 2015-08-24 15:01:22
  • 1551

使用httpclient4.3.X模拟post请求登陆网站获取cookie信息的操作

众所周知,httpclient可以模拟登陆操作,下面我就来个实例测试一下,顺便也回忆下这个开源工具的使用,直接上例子吧!    package com.pyc.search.craw...
  • huo_chai_gun
  • huo_chai_gun
  • 2014-11-26 14:49:38
  • 6389

Android--httpclient模拟post请求和get请求

HttpClient的使用模式: 1. 创建一个HttpClent 2.实例化新的HTTP方法,比如PostMethod 或 GetMethod 3.设置HTTP参数名称/值 ...
  • chaoyu168
  • chaoyu168
  • 2016-03-23 17:01:12
  • 4587

HttpClient服务器模拟浏览器发送请求

前言: 学习第三方登陆的时候,发现开头的知识就用到了HttpClient,也就是服务器模拟浏览器发起的请求,而我不会,于是就先花时间学习了下。 内容包括:GET、POST请求,以及各种零散的知识点...
  • normol
  • normol
  • 2017-07-10 10:23:34
  • 1100

HttpClient模仿登陆并维持同一session请求(HttpClient4.3.X以上版本)

有时我们会碰到一种应用场景:就是在请求服务器前需要先验证用户合法,验证通过后,服务器保持保持同一sessionID与客户端交互,下面我模拟这种场景,用户首先发送post请求进行身份验证,通过后,继续发...
  • zmx729618
  • zmx729618
  • 2016-07-01 15:47:44
  • 8516
收藏助手
不良信息举报
您举报文章:(eg:基站定位)使用HttpClient模拟Http请求,获取返回结果
举报原因:
原因补充:

(最多只允许输入30个字)