在向服务器发帖后,我需要帮助弄清楚如何获取重定向。 首先,我需要从服务器获取一些cookie。然后我用cookie和其他参数执行帖子。然后,服务器以302重定向进行应答。如何获取该重定向的网址?
代码如下所示:
HttpGet get = new HttpGet(urlOne);
try {
//Creating a local instance of cookie store.
CookieStore cookieJar = new BasicCookieStore();
// Creating a local HTTP context
HttpContext localContext = new BasicHttpContext();
// Bind custom cookie store to the local context
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieJar);
HttpResponse response = httpClient.execute(get, localContext);
HttpEntity entity = response.getEntity();
System.out.println("------------------GET----------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
}
// Print out cookies obtained from server
List<Cookie> cookies = cookieJar.getCookies();
for (int i = 0; i < cookies.size(); i++) {
System.out.println("Local cookie: " + cookies.get(i));
}
if (entity != null) {
entity.consumeContent();
}
System.out.println("------------------GET-END---------------------");
// Create a new post
HttpPost post = new HttpPost(urlTwo);
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
// Add params
HttpParams params = new BasicHttpParams();
params.setParameter("action", "search");
params.setParameter("word", "hello");
post.setParams(params);
//Execute
HttpResponse response2 = httpClient.execute(post, localContext);
答案 0 :(得分:2)
请参阅我对这个问题的回答,
答案 1 :(得分:1)
我假设你想要自动化浏览器操作并维护会话,这样你就可以访问那些需要维护会话的页面。
我不知道如何通过org.apache.http.client API。如果您不限于使用org.apache.http.client API并且可以使用其他API,那么您可以使用HtmlUnit API,否则您可以忽略其余的答案。
通过HtmlUnit维护会话和自动化浏览器操作可以按如下方式完成:
import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.*;
final WebClient webClient = new WebClient();
try {
webClient.setJavaScriptEnabled(true);
webClient.setThrowExceptionOnScriptError(false);
webClient.setCssEnabled(true);
webClient.setUseInsecureSSL(true);
webClient.setRedirectEnabled(true);
HtmlPage loginPage = webClient.getPage(new URL("https://www.orkut.com/"));
System.out.println(loginPage.getTitleText());
List<HtmlForm> forms = loginPage.getForms();
HtmlForm loginForm = forms.get(0);
HtmlTextInput username = loginForm.getInputByName("Email");
HtmlPasswordInput password = loginForm.getInputByName("Passwd");
HtmlInput submit = loginForm.getInputByName("signIn");
username.setValueAttribute("username");
password.setValueAttribute("password");
HtmlPage homePage = submit.click();.
Thread.sleep(10 * 1000);
HtmlPage homePageFrame = (HtmlPage) homePage.getFrameByName("orkutFrame").getEnclosedPage();
HtmlPage communitiesTestPage = (HtmlPage) webClient.openWindow(new URL("http://www.orkut.co.in/Main#Community?cmm=1"), "CommunitiesWindow").getEnclosedPage();
}catch(java.security.GeneralSecurityException e) {
e.printStackTrace();
}catch(java.io.IOException e) {
e.printStackTrace();
}catch(InterruptedException e) {
e.printStackTrace();
}
WebWindow ww = webClient.getWebWindowByName("CommunitiesWindow");
WebRequestSettings wrs1 = new WebRequestSettings(URL); // URL is the url that requires authentication first
正如您所看到的,上述代码如何自动执行浏览器操作以及如何自动维护会话。我们不需要手动处理cookie或URLReDirect ......
答案 2 :(得分:1)
我在Java中有一种简单的方法。以下是步骤:
HttpURLConnection.setFollowRedirects( true );
//默认情况下应为true getHeadersFields()
; getUrl()
获取重定向的URL; 还有另一种使用HTTP标头中的位置字段获取它的方法,但有时我们不会在标头中获取位置字段。它至少对我不起作用。但是上面的方法,肯定是有效的。
答案 3 :(得分:0)
它位于location
标题中。