Java アプリケーションで ics ファイルをダウンロードしたいので、このページのコードを試してみました: http://hc.apache.org/httpclient-legacy/tutorial.html (一番下)。
多くの URL ですべて問題ありませんが、この URL ではタイトルにエラーが表示されます: http://www.sportycal.com/cal/getIcs/id/264/remider/1/ct/any/sportycal.ics
最初のURLで機能するため、IDEの構成の問題ではないと思います...
さらに、ブラウザで 2 番目の URL からファイルをダウンロードすると、次のヘッダーが表示されます。
Request URL:url_du_site
Request Method:GET
Status Code:200 OK
リクエスト ヘッダー
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Host:www.sportycal.com
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
応答ヘッダー
Access-Control-Allow-Origin:*
Connection:close
Content-Disposition:attachment; filename=cal.ics
Content-Type:text/calendar; charset=utf-8
Date:Fri, 25 Oct 2013 08:11:16 GMT
Server:Apache/2.2.14 (Ubuntu)
Set-Cookie:symfony=8p9gbbp301jhteu52e2qu1nie0; path=/
X-Cache:MISS from office-proxy.priv.atos.fr
X-Cache-Lookup:MISS from office-proxy.***.fr:3128
X-Powered-By:PHP/5.3.2-1ubuntu4.18
私はこれについて考えました:接続:閉じる。私は RFC を探しましたが、それが何を意味するのかよくわかりません.非持続的な接続が機能しない理由である可能性があると思いますか? このファイルを取得するにはどうすればよいですか?
よろしくお願いします。
(私の英語が下手で申し訳ありませんが、とにかく理解していただければ幸いです...)
編集 :
私が試したコードは、実際にはチュートリアルと同じです:
public static void main(String[] args) {
String url = "http://www.sportycal.com/cal/getIcs/id/264/remider/1/ct/any/sportycal.ics";
readUrl(url);
}
private static void readUrl(String url) {
// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
// Provide custom retry handler is necessary
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler(3, false));
try {
// Execute the method.
int statusCode = client.executeMethod(method);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: " + method.getStatusLine());
}
// Read the response body.
byte[] responseBody = method.getResponseBody();
// Deal with the response.
// Use caution: ensure correct character encoding and is not binary data
System.out.println(new String(responseBody));
} catch (HttpException e) {
System.err.println("Fatal protocol violation: " + e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println("Fatal transport error: " + e.getMessage());
e.printStackTrace();
} finally {
// Release the connection.
method.releaseConnection();
}
}
そして、私が得るスタックトレースは次のとおりです:
Fatal transport error: Connection timed out: connect
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:249)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:79)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:121)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
at tests.TestUrl.readUrl(TestUrl.java:46)
at tests.TestUrl.main(TestUrl.java:28)
編集2:私の環境が原因のようです:遠くのサーバーで試してみたところ、うまくいくようです!! しかし、なぜ一部の URL には問題がなく、他の URL には問題があるのでしょうか... 他のアイデアはありませんか?