Отправка HTTP-запроса GET / POST для создания с Java? - PullRequest
2 голосов
/ 31 марта 2012

Итак, у меня есть этот кусок кода, и я заставил его работать, и теперь он в основном позволяет мне отправлять сообщения http и получать запросы практически на любой внешний веб-сайт, который я хочу, ЕСЛИ БЕЗ элементов не содержат атрибута name. Вот пример:

Это код Java:

    public static String sendPostRequest(String url) {

    StringBuffer sb = null;

    try {

        String data = URLEncoder.encode("user", "UTF-8") + "="
                + URLEncoder.encode("myUserName", "UTF-8") + "&"
                + URLEncoder.encode("submit", "UTF-8") + "="
                + URLEncoder.encode("Submit", "UTF-8");


        URL requestUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) requestUrl
                .openConnection();
        conn.setDoOutput(true);
        conn.setRequestMethod("GET");

        OutputStreamWriter osw = new OutputStreamWriter(
                conn.getOutputStream());
        osw.write(data);
        osw.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));

        String in = "";
        sb = new StringBuffer();

        while ((in = br.readLine()) != null) {
            sb.append(in + "\n");
        }

        osw.close();
        br.close();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return sb.toString();
}

Это форма, к которой я пытаюсь отправить запрос (это форма на сайте w3schools, это сайт http://www.w3schools.com/html/html_forms.asp):

<form name="input0" target="_blank" action="html_form_action.asp" method="get">

Username: 

<input type="text" name="user" size="20" />

<input type="submit" value="Submit" />

</form>

Теперь, поскольку кнопка Submit не имеет атрибута name, я не могу отправить ей правильный HTTP-запрос Get / Post (в данном случае я знаю, что это метод get). Чем я заменяю данные String (какими надлежащими ключами / значениями), чтобы они действительно отправляли запрос в эту форму?

Ответы [ 4 ]

1 голос
/ 31 марта 2012

Вы вообще не добавляете часть submit к своим данным.Это просто для браузера, чтобы знать, что кнопка «Отправить» запускает действие.Обратите внимание, как выглядит URL только что открытого сайта: http://www.w3schools.com/html/html_form_action.asp?user=myUserName - здесь нет submit части.Ваш код data должен выглядеть следующим образом:

String data = URLEncoder.encode("user", "UTF-8") + "="
            + URLEncoder.encode("myUserName", "UTF-8"); // end here
1 голос
/ 31 марта 2012

Я использую HttpClient для генерации http-запроса

HttpClient - проект с открытым исходным кодом apache.Вы можете получить широко код.HttpClient версии 4.1 является хорошим набором Http API

HttpClient Learning Artical

0 голосов
/ 10 октября 2012

У меня есть класс ClientHttpRequest, который выполняет все операции с файлами, файлами и т. Д., С возможностью отслеживания и отмены.Это было около 10 лет.Довольно прост в использовании.Теперь есть и версия Scala.https://github.com/vpatryshev/ScalaKittens/blob/master/src/main/scala/scalakittens/ClientHttpRequest.scala

http://myjavatools.com/

0 голосов
/ 31 марта 2012

// Выполнение http get request

HttpClient httpClientDefault1 = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://www.your.targer.url.com/page.html");

// настройка заголовков (сервер понимает запрос, выданный некоторым браузером)

httpPost.setHeader("Connection", "keep-alive");
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1");
httpPost.setHeader("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpPost.setHeader("Accept-Language", "en-us,en;q=0.5");
httpPost.setHeader("Host", "ec2-23-20-44-83.compute-1.amazonaws.com");

httpPost.setHeader ("Referer", resultUrl +resultUrlAsp);

// Установить параметры

ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("key",""));
nameValuePair.add(new BasicNameValuePair("txtenroll","095020693015"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));

// Отправить запрос

HttpResponse httpRespnse = httpClientDefault1.execute(httpPost);

// Также получить тело ответа

if(httpRespnse.getStatusLine().getStatusCode() != 200) {
    InputStream in =  httpRespnse.getEntity().getContent();
    byte b[] = new byte[1024] ;
    StringBuilder html = new StringBuilder("");
    while(in.read(b) != -1) {
        html.append((new String(b)).toString());
        b = new byte[1024];
    }
    System.out.println(html);
}

Вы можете получить заголовки, параметры http, файлы cookie, управлять сеансом через код Java ... :):)

...