【问题标题】:Request by browser gets ok, but request by java got 301浏览器请求正常,但 java 请求得到 301
【发布时间】:2016-07-14 12:33:17
【问题描述】:

当我尝试向this URL 发出 Java HTTP 请求时遇到问题:

如果我通过浏览器请求它,我会收到一个 .csv,但是当我尝试 getRequest 或 postRequest 时,我会收到一个 301 代码。

这是我的代码:

public InputStream sendGet(String url) throws Exception {

    String USER_AGENT = "Mozilla/5.0";
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    // optional default is GET
    con.setRequestMethod("GET");

    //add request header
    con.setRequestProperty("User-Agent", USER_AGENT);

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    InputStream in = con.getInputStream ( ) ;
    return in;
}

public InputStream sendPost() throws Exception {

    String Url = "http://www.oanda.com/currency/historical-rates/download";
    URL obj = new URL(Url);
    //HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    HttpURLConnection con2 =  (HttpURLConnection) obj.openConnection();
    String USER_AGENT = "Mozilla/5.0";
    //add reuqest header
    con2.setRequestMethod("POST");
    con2.setRequestProperty("User-Agent", USER_AGENT);
    con2.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

    String urlParameters = "quote_currency=EUR&end_date=2016-3-26&start_date=2016-3-24&period=daily&display=absolute&rate=0&data_range=c&price=mid&view=graph&base_currency_0=USD&base_currency_1=&base_currency_2=&base_currency_3=&base_currency_4=&download=csv";

    // Send post request
    con2.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con2.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

    int responseCode = con2.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + Url);
    System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);

    InputStream in = con2.getInputStream() ;
    return in;
}

【问题讨论】:

标签: java http-status-code-301


【解决方案1】:

响应要求您将请求重定向到新 URL。 Web 浏览器会自动执行此操作,但您必须通过 Java 代码执行此操作。您可以使用以下方法获取该重定向位置:

con.getHeaderField("Location")

只需使用新 URL 触发一个新的 Http 请求,您应该会得到 csv 文件。

【讨论】:

  • 谢谢。它重定向到https。现在它工作正常。
猜你喜欢
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多