我在從這個網頁獲取 XML 時遇到一個問題。在瀏覽器中,它顯示正確,沒有任何問題,但當涉及到 Java 時,情況就不同了。
我已經嘗試了兩種方法,但都出現了例外。
// Method 1 - Using Java's URL.
URL url = new URL(/* mentioned link */) 。
String rawXML = new String(url. openStream().readAllBytes(), StandardCharsets.UTF_8); // java.io.IOException: 無效的Http回應
// Method 2 - Using Apache's HTTP client.
HttpGet httpGet = new HttpGet(/* mentioned link */) 。
String rawXML = EntityUtils. toString(HttpClients.createDefault().execute(httpGet).getEntity()); // org.apache.http.ProtocolException。服務器未能回應一個有效的HTTP回應。
用wget下載這個網頁,并使用引數--content-on-error可以作業,但不可靠,因為wget并不總是在所有的系統上可用,如Windows。
uj5u.com熱心網友回復:
回應不包含頭檔案,所以java拒絕它
wget "https://www.strava.cz/foxisapi/foxisapi.dll/istravne.istravne.process?xmljidelnickyA&zarizeni=3148"/span> -O so-69226464.html
--2021-09-17 13。 44:29-- https:/span>//www. strava.cz/foxisapi/foxisapi.dll/istravne.istravne.process?xmljidelnickyA&zarizeni=3148
解決www.strava.cz (www.strava.cz)... 82.99.180.77。
連接到www.strava.cz (www.strava.cz)|82.99.180.77|:443...連接。
已發送HTTP請求,正在等待回應...... 200 沒有頭資訊,假設HTTP/0.9。
長度:未指定
這個java類做一個原始的HTTP GET請求,能夠得到內容。基于這個頁面。
發送的請求是
GET /foxisapi/foxisapi.dll/istravne.istravne.process?xmljidelnickyA& zarizeni=3148 HTTP/1.1
User-Agent: 瀏覽器:RawHttpGet
主機: www.strava.cz
Accept: */*
Java代碼:
import java.io.BufferedReader。
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter。
import java.net.Socket。
import java.nio.charset.StandardCharsets;
import javax.net.ssl.SSLSocketFactory;
public class RawHttpGet {
private static String hostname = "www.strava.cz";
public static void main(String[] args) throwsIOException {
Socket socket = SSLSocketFactory.getDefault().createSocket(hostname, 443)。
//UTF-8編碼。
//BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8));
//此請求的編碼
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket. getOutputStream(), "Cp1250"))。)
BufferedReader in = new BufferedReader(new InputStreamReader(socket. getInputStream()))。)
StringBuffer buff = new StringBuffer("GET /foxisapi/foxisapi. dll/istravne.istravne.process?xmljidelnickyA&zarizeni=3148 HTTP/1.1
")。)
buff.append("User-Agent: RawHttpGet
")。)
buff.append("接受。*/*
")。)
buff.append("主機。" hostname "
")。)
buff.append("
")。)
System.out.println(" * Request")。
System.out.println(buff.toString())。
//發送訊息。
out.write(buff.toString())。
out.flush()。
//讀取回應
System.out.println(" * Response"/span>)。
//default system encoding
//System.out.println(new String(socket.getInputStream().readAllBytes());
///此請求的編碼。
System.out.println(new String(socket.getInputStream().readAllBytes(), "Cp1250")。
out.close()。
in.close()。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324044.html
標籤:
