Форум
 

Вопросы и ответы по «cURL»

Можно ли интегрировать или использовать что то подобное cURL в JAVA?

Здраствуйте! меня интересует, можно ли интегрировать или использовать что то подобное cURL в JAVA, если да, то подскажите что именно.
16.05.2011 21:16
Пожаловаться
Подписаться
+
0
-
0

Ответы на вопрос (27)

Сортировать по
голосам
2
mikef (20278)
+
0
-
0
16.05.2011 22:50
Здраствуйте! Можно копать в эту сторону java.net.URL и/или в эту java.net.URLConnection.

Вот, например так:
Java

URL url = new URL("https://mydiv.net");
InputStream response = url.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(response));
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
reader.close();
mikef (20278)
+
0
-
0
16.05.2011 22:53
Вот, есть несколько примеров в небольшом туториале: http://download.oracle.com/jav...rking/urls/readingWriting.html
mikef (20278)
+
0
-
0
16.05.2011 22:54
Еще стоит ознакомиться с этим: http://hc.apache.org/httpcomponents-client/index.html
mikef (20278)
+
0
-
0
16.05.2011 22:59
Если с английским туго, то используем онлайн-переводчики
+
0
-
0
17.05.2011 06:08
Если Вам будет не сложно, не могли бы помочь, у меня проблема.
Нужно сохранить на hdd изображение капчи, как мне это сделать.
При обновлнеии страницы или загрузки ее с помощью java.net.URL и получения кода страницы сама какртинка и код на ней меняется. Помогите пожалуста. В долгу не останусь, мне по работе нужно...
mikef (20278)
+
1
-
0
17.05.2011 06:19
Нужно сохранить на hdd изображение капчи, как мне это сделать.

Тут все зависит от поставленных задач.
mikef (20278)
+
0
-
0
17.05.2011 06:20
При обновлнеии страницы или загрузки ее с помощью java.net.URL и получения кода страницы сама какртинка и код на ней меняется.

Так вообще то и должно быть, смысл капчи в том, чтобы защитить форму от автосабмита.
mikef (20278)
+
0
-
0
17.05.2011 06:23
Опишите подробнее, что нужно сделать. Ну, и что конкретно не получается реализовать.
+
0
-
0
17.05.2011 06:46
Java

package MTS;
import java.net.*;
import java.io.*;
import java.lang.String;

public class main{

public static String main(int p) throws IOException
{
String r=null;
String inputLine;
StringBuilder sb=new StringBuilder();
StringBuilder style=new StringBuilder();
dfile t = new dfile();
String myDir = "D:\\mtsSMS\\";
URL MyMTS = new URL("http://www.mts.com.ua/ukr/sendsms.php");
URLConnection mts = MyMTS.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(mts.getInputStream()));
while ((inputLine = in.readLine()) != null)
{
sb.append(inputLine);
System.out.println(inputLine);
r=inputLine;
}
String MTS = "http://www.mts.com.ua/";

int a = sb.indexOf("back/modules/golden/captcha.php?");
int b = sb.indexOf("&rnd");
String k=sb.substring(a);
String Cap = k.substring(0, k.indexOf("\""));
try {
BufferedWriter out = new BufferedWriter(//
new FileWriter(myDir + "sendsms.php"));
String filen = t.replaceString(sb.toString(), "href=\"/", "href=\"");
filen = t.replaceString(filen, "src=\"/", "href=\"");
filen = t.replaceString(filen,"href=\""+ Cap,"src=\"back/modules/golden/captcha.jpg");
filen = t.replaceString(filen, "id=\"pageContent\" style=\"visibility:hidden;", "id=\"pageContent\" style=\"visibility:visible;");
out.write(filen);
out.close();
} catch (IOException e) {
e.printStackTrace();

В переменную Cap заносится ссылка на капчу. казалось бы все просто но тут же обновляется капча и ничего в результате, код другой и смс не отправляется.
на http://smste.ru/ все работает как нужно если ввести номер сети МТС или другого оператора, то загружается нужная капча и смс успешно приходит, проверял. А у меня капча сохраняется и выводится но отправить не удается т.к. уже другой код на ней
+
0
-
0
17.05.2011 06:56
Нужно просто стащить капчу на диск, после чего у себя сформировать страничку с формой, которая бы могла отправлять смс, с JSP страницы, ну а классы все естественно на яве.
mikef (20278)
+
0
-
0
19.05.2011 03:26
Да, посмотрел, капча действительно там генерится, как-то хитроумно... как вариант, можно попробовать капчу грузить отправляя HTTp GET запрос с ID сесии в кукисах, может так защита построена.
mikef (20278)
+
0
-
0
19.05.2011 18:46
А еще вариант, это реализовать вручную все HTTР-запросы, так мне кажется точно работать должно.

Т.е. идея заключается в том, чтобы послать например, HTTР GET запрос на загрузку странички "http://www.mts.com.ua/ukr/sendsms.php"

а затем, также послать HTTР GET запрос на загрузку самой капчи, распарсив предварительно полученную первую страницу. При этом капча будет грузится первый раз и по идее все должно подходить.

Ну, а потом отсылаем HTTР POST запрос c нужными данными.
mikef (20278)
+
0
-
0
19.05.2011 18:47
В таком случае имитация браузера будет максимальной и все должно корректно работать.
+
0
-
0
20.05.2011 07:07
Не могли бы быть так любезны, и привести пример кода, как отправить Get запрос ?
mikef (20278)
+
0
-
0
21.05.2011 15:54
ну, например, для загрузки странички "http://www.mts.com.ua/ukr/sendsms.php" нужно отправить такой запрос:

Text

GET /ukr/sendsms.php HTTP/1.1
Host: www.mts.com.ua
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Referer: http://www.mts.com.ua/
Connection: keep-alive
Cookie: __utmx=149635946.; __utmxx=149635946.; __utma=149635946.286243737.1305776077.1305776077.1305803661.2; __utmz=149635946.1305776077.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
mikef (20278)
+
0
-
0
21.05.2011 15:55
В принципе параметр "Cookie:" можно и не отсылать наверное в первый раз.
mikef (20278)
+
0
-
0
21.05.2011 15:57
Для того чтобы отслеживать как происходит отправка Http-запросов лучше всего юзать браузер FireFox с установленным плагином HttpFox
+
0
-
0
22.05.2011 07:27
Добавте пожалуйста меня в скайпе или аське
Skype : Vertago3
ICQ : 458264161
Что то я не понимаю немного что сделать нужно.
Как отправить этот запрос и как при этом получить ответ на языке Java
mikef (20278)
+
0
-
0
22.05.2011 09:29
Добавте пожалуйста меня в скайпе или аське
Извините, не все ответы будут только на этом сайте. Тем более, что это сможет помочь не только вам, но и другим пользователям, которых будет интересовать подобные вопросы.
mikef (20278)
+
0
-
0
22.05.2011 09:32
Как отправить этот запрос и как при этом получить ответ на языке Java
Вот, вам в помошь несколько ссылок, там достаточно исчерпывающе описан сам поцесс:
Отправка POST запроса из Java
Пример работы с протоколом HTTP в Java (java.net.*). POST и GET запросы
Java. HTTP протокол и работа с WEB
Генерация HTTP запросов
+
0
-
0
13.06.2011 08:05
Вот тут нашол практически решение, точнее алгоритм.
Но на PHP.
Вопрос, как же встетаки отправить в Java
- заголовок браузера
PHP

$ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4';

curl_setopt($ch, CURLOPT_USERAGENT, $ua);


Так как это делается выше через PHP cURL
и что самое главное как я тут посмотрел они отправляют еще несколько запросов
curl_setopt($ch, CURLOPT_COOKIE, 'PHPSESSID='.$session); // с кукисами я разобрался, это у меня получилось
curl_setopt($ch, CURLOPT_REFERER, 'http://www.mts.com.ua/ukr/sendsms.php'); // вот очень интересно как такое сделать на Java
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // что значит данная строка я даже не понял

curl_setopt($ch, CURLOPT_POSTFIELDS, "script=%2Fukr%2Fsendsms.php&sms_tag_id=3&network1=$operator&phone1=$mobile&message=$txt&lang=lat&captcha=$captcha"); // и вот как сделать такой вот запрос на Java?
+
0
-
0
14.06.2011 04:39
Да, абсолютно верно, но что на счет
PHP

curl_setopt($ch, CURLOPT_POSTFIELDS, "script=%2Fukr%2Fsendsms.php&sms_tag_id=3&network1=$operator&phone1=$mobile&message=$txt&lang=lat&captcha=$captcha");
+
0
-
0
26.06.2011 12:41
С постфилдом тоже разобрался, но ребята, там на курле все работает прекрасно... но на яве никак не хочет загружать картинку правильно.... вот посмотрите что я делаю....

index.jsp :
Java

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="mts.*"%>
<%@page import="java.net.*"%>
<%@page import="java.io.*"%>
<%@page import="java.util.Random"%>
//.........
dwn action = new dwn();
<%
// GET PAGE //

dwn action = new dwn();

ClientWithResponseHandler sms = new ClientWithResponseHandler();
String html = sms.SendSMS("http://www.mts.com.ua/ukr/sendsms.php");
Random rand = new Random();
int rnd = rand.nextInt(9999999);
// STAR PARAMS
String operator = "38050";
String mobile = "2647317";

String message = "Hello!";

// PHPSESSID //
System.out.println("rand = " + rnd);
int b = html.indexOf("PHPSESSID=");
String PHPSESSID = html.substring(b+10);
int e = PHPSESSID.indexOf("\"");
PHPSESSID = PHPSESSID.substring(0,e);
String tmp;
// RND //
int beginOfRnd = html.indexOf("&rnd=");
tmp = html.substring(beginOfRnd+5);
int endOfRnd = tmp.indexOf("\"");
String randTemp = tmp.substring(0,endOfRnd);
// PRINT PHPSESSID & RND //
System.out.println(PHPSESSID + " " + randTemp);
//
String fileName ="d:\\mtsSMS\\file.jpg";
String url2 = "http://www.mts.com.ua/back/modules/golden/captcha.php?PHPSESSID="+PHPSESSID+"&rnd="+randTemp+"";
String respone ="PHPSESSID="+ PHPSESSID +"; path=/ ";
action.loadImage(url2,respone);
%>
<form

dwn.java :
Java

package mts;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.*;
import java.util.Map;
import java.net.*;
import java.io.File;
import java.util.concurrent.Future;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
public class dwn
{
public static void main(String url,String path,String FileName,String respone) throws IOException
{
String UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2";
URLConnection conn = new URL(url).openConnection();
conn.setRequestProperty("User-Agent",UserAgent);
conn.setRequestProperty("Referer", "http://www.mts.com.ua/ukr/sendsms.php");
conn.setRequestProperty("Cookie", respone);
java.io.BufferedInputStream in = new java.io.BufferedInputStream(conn.getInputStream());
String dir = "D:\\mtsSMS\\" + path + FileName;
java.io.FileOutputStream fos = new java.io.FileOutputStream(dir);
java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
byte[] data = new byte[1024];
int x=0;
while((x=in.read(data,0,1024))>=0)
{
bout.write(data,0,x);
}
System.out.println("Загружаем " + dir + " ...");
bout.close();
in.close();
}
public String replaceString(String aSearch, String aFind, String aReplace) {
String result = aSearch;
if (result != null && result.length() > 0) {
int a = 0;
int b = 0;
while (true) {
a = result.indexOf(aFind, b);
if (a != -1) {
result = result.substring(0, a) + aReplace + result.substring(a + aFind.length());
b = a + aReplace.length();
} else
break;
}
}
return result;
}

public String getResponseCookies(HttpURLConnection connection) {
Map<?, ?> responseHeaders = connection.getHeaderFields();
java.util.List responseCookies = (java.util.List) responseHeaders.get("Set-Cookie");
String allCookies = "";
if (responseCookies != null) {
for (int i = 0; i < responseCookies.size(); i++) {
allCookies = allCookies + responseCookies.get(i) + " ";
}
}
return allCookies;
}

public String readStreamToString(InputStream in, String encoding)
throws IOException {
StringBuffer b = new StringBuffer();
InputStreamReader r = new InputStreamReader(in, encoding);
int c;
while ((c = r.read()) != -1) {
b.append((char)c);
}
return b.toString();
}

public static Image loadImage(String URL,String respone) throws ClientProtocolException, IOException {
//
String UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4";
URLConnection connSMS = new URL(URL).openConnection();
connSMS.addRequestProperty("User-Agent",UserAgent);
connSMS.setDoInput(true);
connSMS.setDoOutput(true);

connSMS.addRequestProperty("Referer", "http://www.mts.com.ua/ukr/sendsms.php");
connSMS.addRequestProperty("Cookie", respone);
// Create a response handler
try {
String fileName = "D:\\mtsSMS\\cap.jpg";
BufferedImage img = ImageIO.read(connSMS.getInputStream());
File file = new File(fileName);
if (!file.exists()) {
file.createNewFile();
}
ImageIO.write(img, "jpg", file);
return img;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

}

ClientWithResponseHandler.java :
Java


package mts;

import org.apache.http.client.ResponseHandler;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;


public class ClientWithResponseHandler {

public final static String SendSMS(String args) throws Exception {

String UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4";
String responseBody = null;
HttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget = new HttpGet(args);
httpget.addHeader("User-Agent", UserAgent);
httpget.addHeader("Referer", "http://www.mts.com.ua/ukr/sendsms.php");
System.out.println("executing request " + httpget.getURI());
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
responseBody = httpclient.execute(httpget, responseHandler);
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
return responseBody;
}

}
+
0
-
0
28.06.2011 10:58
Урааа! Все ! я нашол в чем была проблема.
Смс отлично отправляются!))))
2
Вопрос и ответы были вам полезны?
Да
Нет
Попробуйте также:

Похожие вопросы :

Добавить ответ

Ваше имя:

Регистрация? Это возможность подписаться на новые ответы, получать за ответы очки и призы
В ответ на сообщение Нет
+ Фото
Captcha
Текст с картинки:
Отправить
Маты, сообщения БОЛЬШИМИ БУКВАМИ, с грубыми ошибками, просто неуважительные или совершенно не по теме будут удаляться.