JSOUP 教程,JSOUP請求JSON ,JSOUP返回JSON 數據

soゝso 2016-09-13 13:10:25 49891

最近在使用 JSOUP  作為 爬蟲  爬取數據,在用習慣了 JSOUP  后,因為那種鏈式結構,非常喜歡,故想用它來請求接口,構造請求頭的時候非常方便。其實它必須是支持的,因為底層使用的還是 HttpConnection  做為處理的,代碼如下:

Document doc = Jsoup
		.connect(Constant.DATA_URL)
		.header("Accept", "*/*")
		.header("Accept-Encoding", "gzip, deflate")
		.header("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
		.header("Content-Type", "application/json;charset=UTF-8")
		.header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0")
		.timeout(10000).get();
Element body = doc.body();
JSONObject json = JSONObject.fromObject(body.text());

但是出現問題了,請求就報錯:

org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml. Mimetype=application/json;charset=UTF-8, URL=http://www.baidu.com/
	at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:600)
	at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540)
	at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)
	at org.jsoup.helper.HttpConnection.get(HttpConnection.java:216)

當然一看就明白,說沒有指定類型。找了如下解決方案:

 Response res = Jsoup.connect(Constant.DATA_URL)
		.header("Accept", "*/*")
		.header("Accept-Encoding", "gzip, deflate")
		.header("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
		.header("Content-Type", "application/json;charset=UTF-8")
		.header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0")
		.timeout(10000).ignoreContentType(true).execute();//.get();
String body = res.body();
JSONObject json = JSONObject.fromObject(body);

上面其實關鍵點在于:ignoreContentType(true) ,這個是忽略請求類型。建議用execute() 去執行,如果用get 去執行的話,返回來是一個 HTML  頁面包裹的 JSON  ,你處理起來稍微有點費勁。返回情況如下:

而且你要處理換行,你看到有換行了吧, JSON  正確的格式是一行返回,多行的話轉成 JSON  對象的時候就會報錯。所以還是推薦用execute() 去執行。

不過我最后還是換做用 HttpConnection  來解決。

InputStreamReader reader = null;
BufferedReader in = null;
try {
	URL url = new URL(Constant.DATA_URL);
	URLConnection connection = url.openConnection();
	connection.setConnectTimeout(1000);
	reader = new InputStreamReader(connection.getInputStream(), "UTF-8");
	in = new BufferedReader(reader);
	String line = null; // 每行內容
	StringBuffer content = new StringBuffer();
	while ((line = in.readLine()) != null) {
		content.append(line);
	}
	if (StringUtils.isNotBlank(content)) {
		String jsonStr = content.toString().replaceAll("\\n", "");
		data = JSONObject.fromObject(jsonStr);
	}
} catch (SocketTimeoutException e) {
	System.out.println("連接超時!!!");
} catch (JSONException e) {
	System.out.println("網站響應不是json格式,無法轉化成JSONObject!!!");
} catch (Exception e) {
	System.out.println("連接網址不對或讀取流出現異常!!!");
} finally {
	if (in != null) {
		try {
			in.close();
		} catch (IOException e) {
			System.out.println("關閉流出現異常!!!");
		}
	}
	if (reader != null) {
		try {
			reader.close();
		} catch (IOException e) {
			System.out.println("關閉流出現異常!!!");
		}
	}
}

建議API JSON 接口請求,還是用正常的 HTTP  請求吧。


版權所屬:SO JSON在線解析

原文地址:http://www.380127.tw/blog/174.html

轉載時必須以鏈接形式注明原始出處及本聲明。


如果本文對你有幫助,那么請你贊助我,讓我更有激情的寫下去,幫助更多的人。

關于作者
一個低調而悶騷的男人。
相關文章
JQuery Ajax四種寫法,Ajax請求返回JSON 操作Demo
Java API接口返回不是JSON的解決方案,SpringMVC返回JSON配置。
Httpclent 請求限制,判斷返回類型和返回數據大小
JSOUP 教程,JSOUP爬蟲教程,JSOUP超時分析與處理
JSOUP教程,JSOUP 亂碼處理,JSOUP生僻字亂碼解決方案
JSOUP教程,JSOUP的正確打開姿勢。
Elasticsearch 隨機返回數據 API
CDN 請求返回 connection reset by peer,被攔截請求解決方案
JSOUP 教程—— Java爬蟲,簡易入門,秒殺htmlparser
Java 之 HTTP請求亂碼解決,GZIP 返回值亂碼解決
最新文章
QUIC / HTTP3 協議詳細分析講解 1269
恭喜那個做云存儲的七牛云完成 F 輪 10 億人民幣的融資,開啟新的云旅程 1898
Autojs怎么安全加密?Autojs在線加密工具注意事項。 2805
Java JSON 組件選型之 FastJson 為什么總有漏洞? 8483
使用七牛云存儲實現圖片API,自動刪除圖片方案合集 2516
神速ICP備案經驗分享,ICP備案居然一天就通過了 3912
百度加強推送URL鏈接,百度SEO強行推送鏈接JavaScript代碼案例講解。 4097
SOJSON 拓展服務器被DDos攻擊了一晚上,是如何解決的? 4875
湖南地區備案“新增網站需提交組網方案或解釋說明”,關于備案做簡單敘述 5207
企查查你是個什么企業,騙子的幫兇,詐騙的集中營,通過企查查騷擾企業電話不斷,為所欲為的企查查 12147
最熱文章
蘋果電腦Mac怎么恢復出廠系統?蘋果系統怎么重裝系統? 466513
我為什么要選擇RabbitMQ ,RabbitMQ簡介,各種MQ選型對比 433522
免費天氣API,全國天氣 JSON API接口,可以獲取五天的天氣預報 364742
最新MyEclipse8.5注冊碼,有效期到2020年 (已經更新) 358224
免費天氣API,天氣JSON API,不限次數獲取十五天的天氣預報 322112
Elasticsearch教程(四) elasticsearch head 插件安裝和使用 239415
Jackson 時間格式化,時間注解 @JsonFormat 用法、時差問題說明 203823
談談斐訊路由器劫持,你用斐訊路由器,你需要知道的事情 147423
Elasticsearch教程(一),全程直播(小白級別) 127736
Java 信任所有SSL證書,HTTPS請求拋錯,忽略證書請求完美解決 105479

騷碼加入我們 / 千人QQ群:259217951

入群需要5元為的是沒有垃圾廣告,如果沒有QQ錢包,可以加群主拉進。

二維碼生成 來自 >> 二維碼生成器。

支付掃碼

所有贊助/開支都講公開明細,用于網站維護:贊助名單查看

查看我的收藏

正在加載... ...

时时乐上海走势图连线