Я пытаюсь автоматизировать отправку формы, используя Java, чтобы получить часы работы продуктового магазина здесь:
www.giantfood.com
Я разместил запрос и скрытые мили и поля storeType формы, но мой output.html - это просто исходный веб-заголовок и нижний колонтитул с сообщением об ошибке в теле. Что я делаю не так?
import java.io.*;
import java.net.*;
public class PostHTML
{
public static void main(String[] args)
{
try
{
URL url = new URL( "http://www.giantfood.com/our_stores/locator/store_search.htm" );
HttpURLConnection hConnection = (HttpURLConnection)
url.openConnection();
HttpURLConnection.setFollowRedirects( true );
hConnection.setDoOutput( true );
hConnection.setRequestMethod("POST");
PrintStream ps = new PrintStream( hConnection.getOutputStream() );
ps.print("groceryStoreAddress=20814&groceryStoreMiles=10&storeType=GROCERY");
ps.close();
hConnection.connect();
if( HttpURLConnection.HTTP_OK == hConnection.getResponseCode() )
{
InputStream is = hConnection.getInputStream();
OutputStream os = new FileOutputStream("output.html");
int data;
while((data=is.read()) != -1)
{
os.write(data);
}
is.close();
os.close();
hConnection.disconnect();
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
UPDATE
Спасибо! Использование & сработало. Я пытаюсь использовать HttpClient, но сейчас получаю еще одну ошибку:
package clientwithresponsehandler;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
/**
* This example demonstrates the use of the {@link ResponseHandler} to simplify
* the process of processing the HTTP response and releasing associated resources.
*/
public class ClientWithResponseHandler {
public static void main(String[] args) throws Exception {
HttpClient httpclient = new DefaultHttpClient();
try {
HttpPost httpost = new HttpPost("http://www.giantfood.com/our_stores/locator/store_search.htm");
System.out.println("executing request " + httpost.getURI());
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("groceryStoreAddress", "20878"));
nvps.add(new BasicNameValuePair("groceryStoreMiles", "10"));
nvps.add(new BasicNameValuePair("storeType", "GROCERY"));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httpost, responseHandler);
System.out.println("----------------------------------------");
System.out.println(responseBody);
System.out.println("----------------------------------------");
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
}
Выход:
пробег:
выполнение запроса http://www.giantfood.com/our_stores/locator/store_search.htm
Исключение в потоке "main" org.apache.http.client.HttpResponseException: временно перемещено
в org.apache.http.impl.client.BasicResponseHandler.handleResponse (BasicResponseHandler.java:67)
в org.apache.http.impl.client.BasicResponseHandler.handleResponse (BasicResponseHandler.java:55)
в org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:945)
в org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:919)
в org.apache.http.impl.client.AbstractHttpClient.execute (AbstractHttpClient.java:910)
at clientwithresponse handler.ClientWithResponseHandler.main (ClientWithResponseHandler.java:39)
Java Результат: 1
СТРОИТЬ УСПЕШНО (общее время: 1 секунда)
Мне не понятна ошибка "Перемещено временно".