Облазил пожалуй весь инет и не нашел ни одного полезного совета!
Короче нужно отправить POST запрос допустим на сайт "mysite.com".
Пожалуйста объясните как это сделать.
Буду очень признателен.
=)
P.S.: Все должно происходить не в консоли, а в окне.
P.P.S.: Я слыхал о функции "IdHTTP1", но мой Visual Studio 2010 Express игнорирует ее =(
Другие языки программирования и технологии
POST запрос на C++ и WinAPI
Не хочешь связываться с .NET, используй WinSock API или любую подходящую библиотеку, например curl. Используя С++/CLI, пример Практическое руководство. Отправьте данные, используя класс WebRequest:
#include "stdafx.h"
using namespace System;
using namespace System::IO;
using namespace System::Net;
using namespace System::Text;
int main() {
WebRequest^ request = WebRequest::Create("http://www.contoso.com/PostAccepter.aspx ");
request->Method = "POST";
String^ postData = "This is a test that posts this string to a Web server.";
array<byte>^ byteArray = Encoding::UTF8->GetBytes(postData);
request->ContentType = "application/x-www-form-urlencoded";
request->ContentLength = byteArray->Length;
Stream^ dataStream = request->GetRequestStream();
dataStream->Write(byteArray, 0, byteArray->Length);
dataStream->Close();
WebResponse^ response = request->GetResponse();
Console::WriteLine(((HttpWebResponse^)response)->StatusDescription);
dataStream = response->GetResponseStream();
StreamReader^ reader = gcnew StreamReader(dataStream);
String^ responseFromServer = reader->ReadToEnd();
Console::WriteLine(responseFromServer);
reader->Close();
dataStream->Close();
response->Close();
Console::ReadKey();
return 0;
}
ЗЫ:
> P.S.: Все должно происходить не в консоли, а в окне.
Не понял, как отправка/получение данных по сети связана с тем оконное приложение или консольное? В случае оконного выводим полученное и обработанное в какой-нибудь TextBox, в случае консольного тупо печатаем результат на консоль.
> P.P.S.: Я слыхал о функции "IdHTTP1", но мой Visual Studio 2010 Express игнорирует ее =(
Это вообще какой-то компонент для Delphi.
#include "stdafx.h"
using namespace System;
using namespace System::IO;
using namespace System::Net;
using namespace System::Text;
int main() {
WebRequest^ request = WebRequest::Create("http://www.contoso.com/PostAccepter.aspx ");
request->Method = "POST";
String^ postData = "This is a test that posts this string to a Web server.";
array<byte>^ byteArray = Encoding::UTF8->GetBytes(postData);
request->ContentType = "application/x-www-form-urlencoded";
request->ContentLength = byteArray->Length;
Stream^ dataStream = request->GetRequestStream();
dataStream->Write(byteArray, 0, byteArray->Length);
dataStream->Close();
WebResponse^ response = request->GetResponse();
Console::WriteLine(((HttpWebResponse^)response)->StatusDescription);
dataStream = response->GetResponseStream();
StreamReader^ reader = gcnew StreamReader(dataStream);
String^ responseFromServer = reader->ReadToEnd();
Console::WriteLine(responseFromServer);
reader->Close();
dataStream->Close();
response->Close();
Console::ReadKey();
return 0;
}
ЗЫ:
> P.S.: Все должно происходить не в консоли, а в окне.
Не понял, как отправка/получение данных по сети связана с тем оконное приложение или консольное? В случае оконного выводим полученное и обработанное в какой-нибудь TextBox, в случае консольного тупо печатаем результат на консоль.
> P.P.S.: Я слыхал о функции "IdHTTP1", но мой Visual Studio 2010 Express игнорирует ее =(
Это вообще какой-то компонент для Delphi.
#include <iostream>
#include <string>
#include <sstream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
void BuildHeader(stringstream &hdr, const string &payload, const sockaddr_in *remoteServer)
{
char buf[16] = { 0 };
hdr << "POST /login.jsp HTTP/1.1\r\n";
hdr << "Host: " << inet_ntop(AF_INET,
(const void *)&remoteServer->sin_addr,
buf,
sizeof(buf)) << "\r\n";
hdr << "Content-Length: " << payload.size() << "\r\n";
hdr << "Content-Type: text/html; charset=ISO-8859-4\r\n\r\n";
}
int main(void)
{
sockaddr_in sa;
inet_pton(AF_INET, "127.0.0.1", &(sa.sin_addr));
stringstream ss;
BuildHeader(ss, "<payload></payload>", &sa);
cout << ss.str();
return 0;
}
#include <string>
#include <sstream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
void BuildHeader(stringstream &hdr, const string &payload, const sockaddr_in *remoteServer)
{
char buf[16] = { 0 };
hdr << "POST /login.jsp HTTP/1.1\r\n";
hdr << "Host: " << inet_ntop(AF_INET,
(const void *)&remoteServer->sin_addr,
buf,
sizeof(buf)) << "\r\n";
hdr << "Content-Length: " << payload.size() << "\r\n";
hdr << "Content-Type: text/html; charset=ISO-8859-4\r\n\r\n";
}
int main(void)
{
sockaddr_in sa;
inet_pton(AF_INET, "127.0.0.1", &(sa.sin_addr));
stringstream ss;
BuildHeader(ss, "<payload></payload>", &sa);
cout << ss.str();
return 0;
}
Похожие вопросы
- как думаете люди, что лучше для gui, c++ и winapi или c# ?
- Не могу отправить POST запрос средством jQuery
- WINAPI и C++ в целом
- Почему в этой программе переменная объявлена дважды? (C++, WinAPI)
- Пишут ли еще программы на голом winapi и c++? Или сейчас все пишут при помощи библиотека, таких как Qt?
- WinAPI используют преимущественно в C++?
- На каком языке лучше начать учить Windows Forms: C++ или C# ? и чем вообще WindowsForms отличается от WinAPI ??
- если движок для видеоигры написан на c++ это значит в winapi?нет? тогда в чем?
- Fasm, вызов WinAPI функций
- WinAPI