本人所使用软件
- eclipse
- fiddle
- UC浏览器
分析请求信息
以知乎(https://www.zhihu.com)为例,模拟登陆请求,获取登陆后首页,首先就是分析请求信息。
用UC浏览器F12,点击Network,按F5刷新。使用自己账号登陆知乎后,点www.zhihu.com网址后,出现以下界面
在General中,看到请求方式是GET,在fiddle里请求构造中,方法选定GET。
下拉后,看到Request Header,将里面所有的内容复制下来,粘贴到fiddle的请求构造里
点击Execute,在fiddle中点击访问的网址,点击嗅探,点击下方的TextView,发现并没有显示内容
删除部分无用的Request Header,点击Execute,发现返回数据成功!
发送请求信息,获取数据
从以上的分析可以知道,访问知乎需要的Request Header,只需要有COOKIE就足够了,因此,我们将请求构造里帮我们格式化的内容,复制到txt文件内
接下来就是使用Java发送请求信息了。发送请求信息很简单,就直接贴出代码共同讨论。
package Main;
import Java.io.IOException; import java.io.InputStream; import java.NET.HttpURLConnection; import java.util.HashMap; import java.util.Map; import Utils.HttpUtils; import Utils.HttpUtils.OnVisitingListener; import Utils.StreamUtils; import Utils.StreamUtils.OnGetStringListener; public class Main { public static void main(String[] args) { // 获取网页数据 getWebData(); // 设置参数 // 得到返回数据 } private static void getWebData() { HttpUtils httpUtils = HttpUtils.newInstance(); httpUtils.setOnVisitingListener(new OnVisitingListener() { @Override public void onSuccess(HttpURLConnection conn) { try { InputStream inputStream = conn.getInputStream(); String string = StreamUtils.getString(inputStream); System.out.println(string); } catch (IOException e) { e.printStackTrace(); } } @Override public void onSetDetails(HttpURLConnection conn, HttpUtils httpUtils) { Map<String, String> map = new HashMap<String, String>(); StreamUtils.getString("requestheader.txt", new OnGetStringListener() { @Override public void onGeted() { } @Override public void onGetString(String line) { System.out.println(line); String[] strings = line.split(":"); map.put(strings[0], strings[1]); } }); httpUtils.setRequestProperties(map); } @Override public void onFail(IOException e) { } }).startConnenction("https://www.zhihu.com/", "GET"); }}
Utils封装工具类 package Utils; import java.io.IOException; import java.io.PrintWriter; import java.Net.HttpURLConnection; import java.net.URL; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * Created by admin on 2016/3/2. */ public class HttpUtils { private HttpURLConnection conn; public void setConnection(String fileUrl, String method) throws IOException { URL url = new URL(fileUrl); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(method); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); listener.onSetDetails(conn, this); conn.connect(); } OnVisitingListener listener; public interface OnVisitingListener { void onSuccess(HttpURLConnection conn); void onSetDetails(HttpURLConnection conn, HttpUtils httpUtils); void onFail(IOException e); } public HttpUtils setOnVisitingListener(OnVisitingListener listener) { this.listener = listener; return this; } public void startConnenction(String url, String method) { try { setConnection(url, method); if (conn.getResponseCode() == 200) { listener.onSuccess(conn); } else { throw new IOException(); } } catch (IOException e) { listener.onFail(e); } // if (conn != null) { // conn.disconnect(); // } } public void setRequestProperties(Map<String, String> map) { String key; String value; Set<String> set = map.keySet(); Iterator<String> it = set.iterator(); while (it.hasNext()) { key = it.next(); value = map.get(key); conn.setRequestProperty(key, value); } } public void setRequestBody(String body) { try { PrintWriter writer = new PrintWriter(conn.getOutputStream()); writer.write(body); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } public void setRequestProperty(String type, String value) { conn.setRequestProperty(type, value); } public static HttpUtils newInstance() { return new HttpUtils(); } }
package Utils;
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexUtils { public static String RegexGroup(String targetStr, String patternStr, int which) { Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(targetStr); if (matcher.find()) { return matcher.group(which); } return “Nothing!”; } public static List<String> RegexGroups(String targetStr, String patternStr, int which) { Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(targetStr); List<String> list = new ArrayList<String>(); while (matcher.find()) { list.add(matcher.group(which)); } return list; } public static String RegexString(String targetStr, String patternStr) { Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(targetStr); if (matcher.find()) { return matcher.group(); } return "Nothing!"; }}
package Utils;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.io.Writer; /** * Created by admin on 2016/2/18. */ public class StreamUtils { public static String readFromStream(InputStream inputStream) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); int len = 0; byte[] buffer = new byte[1024]; while ((len = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } String result = outputStream.toString(); inputStream.close(); outputStream.close(); return result; } private static String line; public static FileReader createFileReader(File file) throws FileNotFoundException { return new FileReader(file); } public static FileWriter createFileWriter(File file) throws IOException { return new FileWriter(file); } public static InputStreamReader createInputStreamReader(Object obj) { if (obj instanceof File) if (!((File) obj).exists()) ((File) obj).getParentFile().mkdirs(); try { return new InputStreamReader(new FileInputStream((File) obj), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } return null; } public static OutputStreamWriter createOutputStreamWriter(Object obj) { if (obj instanceof File) if (!((File) obj).exists()) ((File) obj).getParentFile().mkdirs(); try { return new OutputStreamWriter(new FileOutputStream((File) obj, true), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } return null; } public static BufferedReader createBufferedReader(Object obj, String cd) throws IOException { if (obj instanceof String) return new BufferedReader(createInputStreamReader(new File((String) obj))); if (obj instanceof InputStream) { if (cd == null) return new BufferedReader(new InputStreamReader((InputStream) obj)); else return new BufferedReader(new InputStreamReader((InputStream) obj, cd)); } if (obj instanceof File) { if (!((File) obj).exists()) ((File) obj).createNewFile(); return new BufferedReader(createFileReader((File) obj)); } if (obj instanceof Reader) return new BufferedReader((Reader) obj); if (obj instanceof BufferedReader) return (BufferedReader) obj; return null; } public static BufferedWriter createBufferedWriter(Object obj) throws IOException { if (obj instanceof String) return new BufferedWriter(createOutputStreamWriter(new File((String) obj))); if (obj instanceof OutputStream) return new BufferedWriter(new OutputStreamWriter((OutputStream) obj, "utf-8")); if (obj instanceof File) return new BufferedWriter(createOutputStreamWriter(obj)); if (obj instanceof Writer) return new BufferedWriter((Writer) obj); if (obj instanceof BufferedWriter) return (BufferedWriter) obj; return null; } public interface OnGetStringListener { void onGetString(String line); void onGeted(); } public static void getString(Object obj, OnGetStringListener listener) { BufferedReader br; try { br = createBufferedReader(obj, null); if (br != null) { while ((line = br.readLine()) != null) { listener.onGetString(line); } listener.onGeted(); br.close(); } } catch (IOException e) { e.printStackTrace(); } } public static String getString(Object obj) { BufferedReader br; String str = ""; try { br = createBufferedReader(obj, "utf-8"); if (br != null) { while ((line = br.readLine()) != null) { str += line + "\n"; } } } catch (IOException e) { e.printStackTrace(); } return str; } public static void writeString(Object obj, String str) { BufferedWriter bw; try { bw = createBufferedWriter(obj); if (bw != null) { bw.write(str); bw.close(); } } catch (IOException e) { e.printStackTrace(); } }
发送POST请求
发送POST请求和GET没有太大区别,只不过POST请求需要设置Request Body。在连接之前,得到输出流,写入fiddle里面的Request Body数据就可以。
Java爬虫(一)利用GET和POST发送请求,获取服务器返回信息的更多相关文章
-
RestTemplate发送请求并携带header信息 RestTemplate post json格式带header信息
原文地址: http://www.cnblogs.com/hujunzheng/p/6018505.html RestTemplate发送请求并携带header信息 v1.使用restTempl ...
-
向.net后端发送请求获取数据,在前端动态填充表格
实现效果 实现步骤 通过Ajax请求的方式 1.在前端定义Table 2.通过Ajax向.net后端发送数据请求 3.在.net后端定义方法供前端调用,并返回所需的数据 4.通过构造字符串的方式,将后 ...
-
微信接口开发1--向微信发送请求--获取access_token
//随便放置一个php文件在服务器上.执行该方法--调用模拟get提交---到微信-->获得微信返回的access_token 不建议自己编写模拟get提交方法. 建议直接导入微信框架LaneW ...
-
20200726_java爬虫_使用HttpClient模拟浏览器发送请求
浏览器获取数据: 打开浏览器 ==> 输入网址 ==> 回车查询 ==> 返回结果 ==> 浏览器显示结果数据 HttpClient获取数据: 创建HttpClient ==& ...
-
RestTemplate发送请求并携带header信息
1.使用restTemplate的postForObject方法 注:目前没有发现发送携带header信息的getForObject方法. HttpHeaders headers = new Http ...
-
[笨木头FireFly 02]入门篇2_客户端发送请求,服务器处理请求
原地址:http://www.9miao.com/question-15-53940.html 好,经过上一篇不权威的讲解,大家已经能轻易地让客户端和服务端连接起来了. 但是,仅仅是连接了,可它们俩不 ...
-
使用post向webservice发送请求,并且返回值
注意,这个方法仅仅适用于:该post页面处于websercive 站点下,或者是与webservice同属于一个主站点,即在iis里属于同一主站点的同级虚拟目录. protected void btn ...
-
发送请求获取响应内容(c#)
C#请求url,获取响应的脚本 public string ResultOfApi(string url) { //发送请求 HttpWebRequest request = null; HttpWe ...
-
HTTP Cookies知识-查看、发送、获取、返回
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 HTTP Cookies是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求 ...
随机推荐
-
Nginx配置location总结及rewrite规则写法
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "Helvetica Neue"; color: #323333 } p. ...
-
html5 data
对于html5 的data使用 <div id='testDiv' data-value='123' data-name='china'> 通过var v = document.getLE ...
-
IOS时间戳
什么是时间戳? 时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间.数字时间戳技术是数字签名技术一种变种的应用. 思考:简单来讲就是根据文件hash加密后生成的摘要和时间生成的时 ...
-
Uva 10007 / HDU 1131 - Count the Trees (卡特兰数)
Count the Trees Another common social inability is known as ACM (Abnormally Compulsive Meditation) ...
-
NAT的全然分析及其UDP穿透的全然解决方式
NAT的全然分析及其UDP穿透的全然解决方式 一:基本术语 防火墙 防火墙限制了私网与公网的通信,它主要是将(防火墙)觉得未经授权的的包丢弃,防火墙仅仅是检验包的数据,并不改动数据包中的IP地址和 ...
-
一步一步搞懂支持向量机——从牧场物语到SVM(上)
之前在数据挖掘课程上写了篇关于SVM的"科普文",尽量通俗地介绍了SVM的原理和对各公式的理解.最近给正在初学机器学习的小白室友看了一遍,他觉得"很好,看得很舒服&quo ...
-
ES6躬行记(16)——Set
ES6引入了两种新的数据结构:Set和Map.Set是一组值的集合,其中值不能重复:Map(也叫字典)是一组键值对的集合,其中键不能重复.Set和Map都由哈希表(Hash Table)实现,并可按添 ...
-
iOS 10 应用内跳转到系统设置
在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等.在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个pre ...
-
System.Collections.Generic 源码阅读总结
ArrayList ,List ArrayList 和 List 都是不限制长度的集合类型 ,List相比ArrayList 就内部实现而言除了泛型本质没有太大区别.不过为避免装箱拆箱问题,尽可能使用 ...
-
Android Design Support Library(二)用NavigationView实现抽屉菜单界面
NavigationView在MD设计中非常重要,之前Google也提出了使用DrawerLayout来实现导航抽屉.这次,在Android Design Support Library中,Googl ...