C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Запрос на сервер, я в тупике
Arsa
Отправлено: 24.10.2006, 12:36


Дежурный стрелочник

Группа: Участник
Сообщений: 77



Помогите составить запрос на ссылку:
HTML
http://bnm.md/apps/ofexch_xml.jsp?lang=2&data=10/23/2006


Делаю все через винсок.

Блин задолбался уже юзать интернет в поиске ответа!

Зарание всем спасибо!
Юрий
Отправлено: 24.10.2006, 13:02


Ученик-кочегар

Группа: Участник
Сообщений: 12



На примере Builder C++6 ent это достигается таким способом:
void __fastcall TInet::Site1Click(TObject *Sender)
{
ShellExecute(Inet->Handle,"Open",Site1->Caption.c_str(),
NULL,NULL,SW_RESTORE);
}

В свойствах на вкладке Caption прописывайте http://bnm.md/apps/ofexch_xml.jsp?lang=2&d...data=10/23/2006

smile.gif
__Cheat3r
Отправлено: 24.10.2006, 13:33


Станционный диспетчер

Группа: Участник
Сообщений: 110



Юрий, чё к чему?
Arsa
Отправлено: 24.10.2006, 14:25


Дежурный стрелочник

Группа: Участник
Сообщений: 77



Да ничего здесь к никчему. Так просто окроется ссылка в браузере по умолчанию. Я же говорю, что через WinSock делаю и помочь мне надо в составление загаловка запроса!
AVC
Отправлено: 24.10.2006, 14:55


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (Arsa @ 24.10.2006, 14:25)
Я же говорю, что через WinSock делаю и помочь мне надо в составление загаловка запроса!

Запускаем первый встречный сниффер, набираем в броузере эту ссылку и получаем текст запроса
CODE

GET http://bnm.md/apps/ofexch_xml.jsp?lang=2&d...data=10/23/2006 HTTP/1.0
Accept: */*
Accept-Language: ru
Pragma: no-cache
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MRA 4.2 (build 01102))
Host: bnm.md
Proxy-Connection: Keep-Alive
Cookie: JSESSIONID=ФЫВ..


Это было нужно?
Arsa
Отправлено: 24.10.2006, 15:34


Дежурный стрелочник

Группа: Участник
Сообщений: 77



Ну вот что у меня получается — не то что надо:
CODE

WSADATA lpWSAData;
   SOCKET s;
   AnsiString query;


   query += "GET http://bnm.md/apps/ofexch_xml.jsp?lang=2 HTTP/1.0\r\n";
   query += "Accept: */*\r\n";
   query += "Accept-Language: ru \r\n";
   query += "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
   query += "Host: bnm.md\r\n";
   query += "Proxy-Connection: Keep-Alive\r\n\r\n";
   / Инициализация библиотеки Ws2_32.dll.
   if (WSAStartup(MAKEWORD(2,2),&lpWSAData)!=0){
       ShowMessage("Не могу подключить библиотеку!");
       return;
   }
   // Поучаем IP адрес по имени хоста
   struct hostent* hp;
   hp=gethostbyname("bnm.md");
   // Открываем сокет
   s=socket(AF_INET, SOCK_STREAM, 0);
   if (s==INVALID_SOCKET){
       ShowMessage("Не могу открыть сокет");
       return;
   }
   // Заполняем структуру sockaddr_in
   struct sockaddr_in ssin;
   memset ((char *)&ssin, 0, sizeof(ssin));
   ssin.sin_family = AF_INET;
   ssin.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr[0];
   ssin.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr[1];
   ssin.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr[2];
   ssin.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr[3];
   ssin.sin_port = htons(80);
   // Соединяемся с хостом
   if(connect(s, (sockaddr *)&ssin, sizeof(ssin))==-1){
       ShowMessage("Не удалось соединиться с хостом!");
       return;
   }
   // Отправляем запрос серверу
   int cnt=send(s,query.c_str(),query.Length(),0);
   // Проверяем, не произошло ли ошибки при отправке запроса на сервер
    if (cnt==SOCKET_ERROR){
       ShowMessage("Произошла ошибка при отправке запроса на сервер!");
       return;
    }
    // Получаем ответ с сервера ---------------------------------
    int rr=1;
    char result_ptr[1000000];
    AnsiString xml = "";
    do{
       rr = recv(s, result_ptr, sizeof(result_ptr),0);
       if(rr > 0){
           xml = (xml+ result_ptr).c_str();
       }
       //free(result_ptr);
    }while(rr != 0);
    free(result_ptr);
    // Деинициализация библиотеки Ws2_32.dll
    WSACleanup();

    ShowMessage(xml);
Arsa
Отправлено: 24.10.2006, 15:36


Дежурный стрелочник

Группа: Участник
Сообщений: 77



QUOTE

Это было нужно?

AVC попробуй у себя мой пример и сам все увидишь!
Arsa
Отправлено: 24.10.2006, 16:01


Дежурный стрелочник

Группа: Участник
Сообщений: 77



Ну наконец разобрался! Ура!!!
AVC
Отправлено: 24.10.2006, 16:45


Ветеран

Группа: Модератор
Сообщений: 1583



Попробовал, правда, простите, не ваш пример а своим кодом и получил ответ (что предсказуемо smile.gif ).

Код запроса
CODE

void __fastcall TForm1::Button10Click(TObject *Sender)
{
SOCKET sock = INVALID_SOCKET;

Memo1->Lines->Add(
HttpPostExecute
 (sock
 ,"10.111.96.240"
 ,8080
 ,"\
GET http://bnm.md/apps/ofexch_xml.jsp?lang=2 HTTP/1.0\r\n\
Accept: */*\r\n\
Accept-Language: ru\r\n\
Pragma: no-cache\r\n\
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MRA4.2 (build 01102))\r\n\
Host: bnm.md\r\n\
Proxy-Connection: Keep-Alive\r\n\
\r\n\
"
 ,15000
 )
);



Ответ
CODE

HTTP/1.0 200 OK
Date: Tue, 24 Oct 2006 13:27:09 GMT
Server: Apache
Set-Cookie: JSESSIONID=4FAB84C897282F8CEF09E0759A91B339; Path=/
Content-Length: 6524
Content-Type: text/html
X-Cache: MISS from energo.yaltaonline.net
Proxy-Connection: keep-alive

<?xml version="1.0" encoding="windows-1250" ?>
<ValCurs Date="10/24/2006" name="Official exchange rate">
<Valute ID="35">
 <NumCode>946</NumCode>
 <CharCode>RON</CharCode>
 <Nominal>1</Nominal>
 <Name>Romanian Leu</Name>
 <Value>4.7023</Value>
</Valute>
...

Arsa
Отправлено: 24.10.2006, 16:51


Дежурный стрелочник

Группа: Участник
Сообщений: 77



QUOTE
Попробовал, правда, простите, не ваш пример

На мой пример сервак ругался, ну впрочем я уже разобрался почему!
aquanet sk
Отправлено: 23.02.2007, 13:00


Станционный диспетчер

Группа: Участник
Сообщений: 87



Да, ну и почему?
Arsa
Отправлено: 23.02.2007, 21:45


Дежурный стрелочник

Группа: Участник
Сообщений: 77



QUOTE
Да, ну и почему?

Уже и не помню ...
Сколько времени то прошло с того момента!

Вернуться в Вопросы программирования в C++Builder