Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
1

Http post не отправляется

22.12.2014, 11:20. Показов 1421. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста в чем проблема. Пишет, что коннектится а сам запрос не отправляется.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
WSADATA wsaData;    
struct sockaddr_in mySock;
SOCKET S;
WSAStartup(2,&wsaData);
mySock.sin_family=AF_INET;
mySock.sin_port=htons(80);
mySock.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");
S=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
int error=connect(S,(struct sockaddr *)&mySock,sizeof(mySock));
if(error==0)cout<<"connected"<<endl;   
char buff[2024];
    strcpy(buff,"POST /logklt.php HTTP/1.1\r\n");
    strcat(buff,"Host: 127.0.0.1");
    strcat(buff,"Referer: /logklt.php\r\n");
    strcat(buff,"Cookie: income=1\r\n");
    strcat(buff,"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6\r\n");
    strcat(buff,"Content-Type: application/x-www-form-urlencoded\r\n");
     strcat(buff,"Content-Length: 75\r\n");
     strcat(buff,"\r\n");
     strcat(buff,"tt1=1?tt2=1");
     strcat(buff,"\r\n");
    error=send(S,buff,strlen(buff),0);
    if(error!=-1)cout<<"connected2"<<endl;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2014, 11:20
Ответы с готовыми решениями:

Не отправляется POST запрос
Выдаёт ошибку в HttpSendRequest 12005 Помогите найти, спасибо #include &lt;windows.h&gt; #include...

Неправильно отправляется Curl post
Добрый день, помогите, пожалуйста, разобраться. На сервер приходят все null, и хедер тоже null....

Сообщение отправляется в формате протокола ТСР и уже на адресате преобразуется в HTTP?
Известно, что сообщение сервера, направляемое браузеру, передается на транспортном уровне на основе...

HTTP-POST запрос.
Ниже приведенный код отправляет POST запрос. Проблема в том, что в ответ принимаются не все...

24
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
22.12.2014, 11:39 2
Цитата Сообщение от seka-s79 Посмотреть сообщение
strcat(buff,"Host: 127.0.0.1");
забыли \r\n

Цитата Сообщение от seka-s79 Посмотреть сообщение
strcat(buff,"tt1=1?tt2=1");
разделитель между POST-переменными должен быть &, а не ?

Цитата Сообщение от seka-s79 Посмотреть сообщение
strcat(buff,"Content-Length: 75\r\n");
вы уверены, что так много байт у вас в теле запроса?
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 11:48  [ТС] 3
Спасибо, за ответ, но сделал как Вы написали к сожалению ничего не получается.
Может еще чего не так.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 14:33 4
Откуда в Content-Length 75 ?
Там должна быть длина вот этой строки, в байтах:
tt1=1&tt2=1
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 14:40  [ТС] 5
Поставил 11 всеровно не выходит.
Выводит, что ошибки send не выдает.
А в браузере молчок.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 14:43 6
А что возвращает сервер ? Какой код HTTP ?

Добавлено через 1 минуту
Кстати, самый последний strcat не нужен.
1
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 15:01  [ТС] 7
Я не знаю. А как узнать, что возвращает сервер?
Подскажите, пожалуйста.

Добавлено через 16 минут
Добавил этот код, а он ничего не выводит.
C++
1
2
3
4
5
error = recv(S, buff, strlen(buff), 0);
        if ( error > 0 ) 
           cout<<"sent"<<endl; 
        else
           cout<<"not sent"<<endl;
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 15:18 8
Запишите HTTP-запрос в файл (содержимое buff прямо перед
вызовом send) и выложите сюда. И то же самое сделайте с ответом сервера
(если он принял запрос, то должен хоть что-то отправить в ответ).
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 15:55  [ТС] 9
это загаловки в файле.

POST http://localhost/logklt.php HTTP/1.1

Host:localhost

Referer: /logklt.php

Cookie: income=1

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6

Content-Type: application/x-www-form-urlencoded

Content-Length: 11

tt1=1&tt2=1

через пять минут записался ответ от сервера
0
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 16:25 10
А между Content-Length и tt1=1&tt2=1 есть двойная пустая строка ?
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 16:35  [ТС] 11
Нет, нету.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 16:38 12
А должна быть.

Добавлено через 1 минуту
Должно быть примерно следующее:
Код
POST http://localhost/logklt.php HTTP/1.1
Host:localhost
Referer: /logklt.php
Cookie: income=1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

tt1=1&tt2=1
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 16:38  [ТС] 13
То есть в буфер записать две пустые строки с переносами строк?
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 16:47 14
"Двойная пустая строка" - это я неверно выразился.
Имелось в виду два идущих друг за другом переноса строки.

В HTTP между заголовками и телом должна быть одна пустая строка.
Иначе сервер никак не поймет, где кончается первое и начинается второе.
То есть:
C++
1
2
3
4
strcpy(buff, "header1: value1\r\n");
strcat(buff, "header2: value2\r\n");
strcat(buff, "header3: value3\r\n\r\n"); // <--  Обратите внимание.
strcat(buff, "This is a body");
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 16:52  [ТС] 15
Сделал как Вы написали.
Теперь возвращает
276

Но в браузере молчит.

Подскажите пожалуйста, что это значит 276.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 17:05 16
276 - это что ?
Значение, которое вернула функция recv или это содержимое буфера,
куда recv записала ответ сервера ?
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 17:11  [ТС] 17
Это то что recv вернула. А надо буфер записать?

Добавлено через 2 минуты
Ответ сервера в буфере

HTTP/1.1 200 OK

Date: Mon, 22 Dec 2014 14:10:02 GMT

Server: Apache/2.2.25 (Win32) PHP/5.3.8

X-Powered-By: PHP/5.3.8

Content-Length: 299

Content-Type: text/html; charset=utf-8



п»ї<html>

<FORM method="POST" action="logklt.php">

<p><b>Логин:</b><br>

<input typ
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 17:20 18
Цитата Сообщение от seka-s79 Посмотреть сообщение
HTTP/1.1 200 OK
Ну вот, значит сервер обработал запрос успешно.
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 48
22.12.2014, 17:25  [ТС] 19
А не подскажете почему POST данные не принимаются. И я заголовки смотрю они на сервере не меняются. То есть как я сделал преведущий GET запрос так он и остается должно же меняться на POST.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.12.2014, 17:28 20
Цитата Сообщение от seka-s79 Посмотреть сообщение
А не подскажете почему POST данные не принимаются.
Сервер вернул код 200 (успех), значит, данные были приняты.

Цитата Сообщение от seka-s79 Посмотреть сообщение
И я заголовки смотрю они на сервере не меняются. То есть как я сделал преведущий GET запрос так он и остается должно же меняться на POST.
Ничего не понятно. Объясните подробнее - какие заголовки, где меняются,
что такое "преведущий GET" и т.д.
0
22.12.2014, 17:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2014, 17:28
Помогаю со студенческими работами здесь

[MFC]HTTP POST запрос
Здравствуйте! Есть такой алгоритм пост запроса на сервер Код: CString strHeaders =...

Winsock отправка http post запроса
возникла необходимость в отправке post запроса, std::string get = &quot;POST &quot;; std::string...

Curl http post request + кириллица
Здравствуйте, нужно написать программу для перевода текста. Использовать буду яндекс апи. С помощью...

HTTP запрос методом post и передача данных
Здравствуйте уважаемые программисты! Я написал программу на с++, которая отправляет http запросы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru