Перейти к содержимому

C как сделать get запрос

  • автор:

Использование Visual C# для выполнения запроса GET

В этой статье описывается, как GET выполнить запрос на получение веб-страницы из Интернета с помощью Visual C#.

Оригинальная версия продукта: Visual Studio
Исходный номер базы знаний: 307023

Аннотация

Microsoft платформа .NET Framework содержит множество полезных классов для сетевых подключений, включая возможность выполнения веб-запросов.

В этой статье рассматриваются следующие платформа .NET Framework имен библиотеки классов:

Требования

В следующем списке приведены рекомендуемые оборудование и программное обеспечение, которые вам нужны:

Если вы используете прокси-сервер, для проверки кода в этой статье необходимо иметь внутренний веб-адрес или статические значения прокси-сервера ( см. шаги 5 и 6 раздела «Запрос веб-страницы»).

Запрос веб-страницы

Возможность программного получения веб-страницы имеет множество вариантов использования. Эта возможность была предоставлена программистам Visual Basic с помощью управления передачей через Интернет или путем прямого написания кода для API Windows Internet (WinINet).

В .NET System.Net WebRequest пространства имен предоставляют класс для инкапсуляции запроса к интернет-ресурсу и WebResponse класс для представления возвращаемых данных.

С помощью этих объектов можно получить поток, представляющий ответ для конкретного запроса. Если у вас есть поток, вы можете прочитать ответ так же, как вы читаете из локального текстового файла или из любого другого источника.

Чтобы выполнить запрос GET , выполните следующие действия.

  1. Запустите Visual Studio.
  2. Создайте консольное приложение в Visual C#. Visual Studio автоматически создает открытый класс и пустой Main метод.
  3. Убедитесь, что проект ссылается по крайней мере наSystem.dll.
  4. Используйте директиву using System для пространства имен, System.NET System.IO пространства имен и пространства имен (для объектов потока), чтобы вам не нужно было уточнять объявления из этих пространств имен позже в коде. Эти инструкции должны использоваться перед любыми другими объявлениями.

using System; using System.Net; using System.IO; 
string sURL; sURL = "http://www.contoso.com"; 
WebRequest wrGETURL; wrGETURL = WebRequest.Create(sURL); 
WebProxy myProxy = new WebProxy("myproxy",80); myProxy.BypassProxyOnLocal = true; wrGETURL.Proxy = myProxy; 
wrGETURL.Proxy = WebProxy.GetDefaultProxy(); 

Примечание. В Visual Studio 2005 или Visual Studio 2008 GetDefaultProxy этот метод работает. Однако этот метод устарел. Дополнительные сведения о GetDefaultProxy методе в платформа .NET Framework 2.0 см. в статье платформа .NET Framework версии 2.0 «Устаревший тип или список элементов (по сборке)».

Stream objStream; objStream = wrGETURL.GetResponse().GetResponseStream(); 
StreamReader objReader = new StreamReader(objStream); string sLine = ""; int i = 0; while (sLine != null) < i++; sLine = objReader.ReadLine(); if (sLine != null) Console.WriteLine(":", i, sLine); > Console.ReadLine(); 

Полный список кода

using System; using System.Net; using System.IO; namespace MakeAGETRequest_charp < /// /// Summary description for Class1. /// class Class1 < static void Main(string[] args) < string sURL; sURL = "http://www.contoso.com"; WebRequest wrGETURL; wrGETURL = WebRequest.Create(sURL); WebProxy myProxy = new WebProxy("myproxy", 80); myProxy.BypassProxyOnLocal = true; wrGETURL.Proxy = WebProxy.GetDefaultProxy(); Stream objStream; objStream = wrGETURL.GetResponse().GetResponseStream(); StreamReader objReader = new StreamReader(objStream); string sLine = ""; int i = 0; while (sLine != null) < i++; sLine = objReader.ReadLine(); if (sLine != null) Console.WriteLine(":", i, sLine); > Console.ReadLine(); > > > 

Обратная связь

Были ли сведения на этой странице полезными?

HTTP-запрос методом GET.

Одним из способов, как можно отправить запрос по протоколу HTTP к серверу, является запрос методом GET. Этот метод является самым распространенным и запросы к серверу чаще всего происходят с его использованием.

Самый простой способ, как можно создать запрос методом GET- это набрать URL-адрес в адресную строку браузера.

Если у вас есть желание погрузиться в тему серверного программирования глубже, все мои уроки здесь.

Браузер передаст серверу примерно следующую информацию:

GET / HTTP/1.1 Host: site.ru User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0 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 Cookie: wp-settings Connection: keep-alive

Запрос состоит из двух частей:

1. строка запроса (Request Line)

2. заголовки (Message Headers)

Обратите внимание, что GET запрос не имеет тела сообщения. Но, это не означает, что с его помощью мы не можем передать серверу никакую информацию. Это можно делать с помощью специальных GET параметров.

Чтобы добавить GET параметры к запросу, нужно в конце URL-адреса поставить знак «?» и после него начинать задавать их по следующему правилу:

имя_параметра1=значение_параметра1& имя_параметра2=значение_параметра2&… 

Разделителем между параметрами служит знак «&».

К примеру, если мы хотим передать серверу два значения, имя пользователя и его возраст, то это можно сделать следующей строкой:

http://site.ru/page.php?name=dima&age=27

Когда выполнен данный запрос, данные попадают в так называемую переменную окружения QUERY_STRING, из которой их можно получить на сервере с помощью серверного языка веб-программирования.

Вот пример, как это можно сделать на языке PHP.

"; echo "Ваш возраст: " . $_GET["age"] . "
"; ?>

Конструкция $_GET[«имя_параметра»] позволяет выводить значение переданного параметра.

В результате выполнения этого кода в браузере выведется:

Ваше имя: dima Ваш возраст: 27

Кстати, переходя по какой-либо ссылке, которая оформлена в HTML вот так:

мы тоже выполняем запрос к серверу методом GET.

Все мои уроки по серверному программированию здесь.

Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:

C curl¶

Пример GET запроса с сайта http://example.com, ответ приходит в формате HTML.

#include #include  int main(void)  CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl)  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); > return 0; >

Результат выполнения программы ¶

 html> head> title>Example Domaintitle> meta charset="utf-8" /> meta http-equiv="Content-type" content="text/html; charset=utf-8" /> meta name="viewport" content="width=device-width, initial-scale=1" /> style type="text/css"> body  background-color: #f0f0f2; margin: 0; padding: 0; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; > div  width: 600px; margin: 5em auto; padding: 50px; background-color: #fff; border-radius: 1em; > a:link, a:visited  color: #38488f; text-decoration: none; > @media (max-width: 700px)  body  background-color: #fff; > div  width: auto; margin: 0 auto; border-radius: 0; padding: 1em; > > style> head> body> div> h1>Example Domainh1> p>This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.p> p>a href="http://www.iana.org/domains/example">More information. a>p> div> body> html>

wttr.in¶

http://wttr.in — веб сервис для получения информации о погоде, ориентированный на отображение в консоле

Пример GET запроса с сайта http://wttr.in, ответ приходит сплошным текстом, если в заголовках запроса User-Agent указан curl .

Тот же результат можно получить выполнив в консоле:

$ curl http://wttr.in/Pyshma
#include #include  int main(void)  CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl)  curl_easy_setopt(curl, CURLOPT_URL, "http://wttr.in/Pyshma"); curl_easy_setopt(curl, CURLOPT_USERAGENT, "curl/7.47.1"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); > return 0; >

Вывод погоды с сайта http://wttr.in/ ¶

$ ./weather Weather for City: Pyshma, Russia Freezing fog _ - _ - _ - -4 °C _ - _ - _ ← 2 km/h _ - _ - _ - 0 km 0.0 mm ┌─────────────┐ ┌──────────────────────────────┬───────────────────────┤ Thu 10. Mar ├───────────────────────┬──────────────────────────────┐ │ Morning │ Noon └──────┬──────┘ Evening │ Night │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤ │ Mist │ Mist │ Freezing fog │ Freezing fog │ │ _ - _ - _ - -6 °C │ _ - _ - _ - -8 – -7 °C │ _ - _ - _ - -6 – -4 °C │ _ - _ - _ - -9 °C │ │ _ - _ - _ ← 3 km/h │ _ - _ - _ ← 2 km/h │ _ - _ - _ ↖ 4 – 5 km/h │ _ - _ - _ ↑ 7 – 11 km/h │ │ _ - _ - _ - 2 km │ _ - _ - _ - 2 km │ _ - _ - _ - 0 km │ _ - _ - _ - 0 km │ │ 0.0 mm | 0% │ 0.0 mm | 0% │ 0.0 mm | 0% │ 0.1 mm | 72% │ └──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘ ┌─────────────┐ ┌──────────────────────────────┬───────────────────────┤ Fri 11. Mar ├───────────────────────┬──────────────────────────────┐ │ Morning │ Noon └──────┬──────┘ Evening │ Night │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤ │ Freezing fog │ Freezing fog │ _`/"".-. Light snow │ Freezing fog │ │ _ - _ - _ - -17 – -13 °C │ _ - _ - _ - -7 – -3 °C │ ,\_( ). -7 – -4 °C │ _ - _ - _ - -14 – -10 °C │ │ _ - _ - _ ↑ 8 – 9 km/h │ _ - _ - _ ↑ 8 – 9 km/h │ /(___(__) ↑ 8 – 12 km/h │ _ - _ - _ ↗ 9 – 14 km/h │ │ _ - _ - _ - 0 km │ _ - _ - _ - 0 km │ * * * 10 km │ _ - _ - _ - 0 km │ │ 0.0 mm | 0% │ 0.0 mm | 0% │ * * * 0.0 mm | 0% │ 0.0 mm | 0% │ └──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘ ┌─────────────┐ ┌──────────────────────────────┬───────────────────────┤ Sat 12. Mar ├───────────────────────┬──────────────────────────────┐ │ Morning │ Noon └──────┬──────┘ Evening │ Night │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤ │ _`/"".-. Light snow │ .-. Moderate snow │ .-. Moderate snow │ .-. Moderate snow │ │ ,\_( ). -16 – -12 °C │ ( ). -8 – -4 °C │ ( ). -6 – -4 °C │ ( ). -10 °C │ │ /(___(__) → 9 – 10 km/h │ (___(__) → 9 – 12 km/h │ (___(__) ↗ 6 – 9 km/h │ (___(__) ↘ 6 – 11 km/h │ │ * * * 10 km │ * * * * 5 km │ * * * * 5 km │ * * * * 5 km │ │ * * * 0.1 mm | 4% │ * * * * 0.2 mm | 14% │ * * * * 0.1 mm | 52% │ * * * * 0.2 mm | 52% │ └──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘ Check new Feature: wttr.in/Moon or wttr.in/Moon@2016-Mar-23 to see the phase of the Moon Follow @igor_chubin for wttr.in updates

qrenco.de¶

http://qrenco.de — веб сервис для получения QR-кодов в текстовом виде

В качестве самостоятельной работы предлагаю вам написать программу которая принимает на вход текст, а на выходе показывает QR-код в текстовом виде.

Генерация QR-кода ¶

$ ./qrcode "Купи хлеба!" █████████████████████████████████ █████████████████████████████████ ████ ▄▄▄▄▄ █▀█ █▄█▄▄ █ ▄▄▄▄▄ ████ ████ █ █ █▀▀▀█ █ ▀█ █ █ ████ ████ █▄▄▄█ █▀ █▀▀█▄███ █▄▄▄█ ████ ████▄▄▄▄▄▄▄█▄▀ ▀▄█▄▀▄█▄▄▄▄▄▄▄████ ████▄▄▄▄ ▀▄▄ ▄▀▄▀▄█ ▀ ▀ █ ▀████ ████ ▄▀ ▄▀██▄█▀█▀▀ ▀ ██▀▀▄█████ ████ ▀▀█▄▀▄▀▄ ▄█▄▀█▄▄█▀█▄ █▀▀████ ████ █▄ ██▄ █ ▄ ▄▄█▀█ █▀█ █▀████ ████▄██▄▄█▄█ ▄▄▄▀▀█▄ ▄▄▄ ▀█▀ ████ ████ ▄▄▄▄▄ █▄▄▀█▀ ▄▄ █▄█ ▀ ▀████ ████ █ █ █ ▀██▄█▄█ ▄ █ ████ ████ █▄▄▄█ █ ▀▀ ▄█▀▄ ▄ █▄█ █ ████ ████▄▄▄▄▄▄▄█▄█▄▄███▄▄█▄████▄▄████ █████████████████████████████████ █████████████████████████████████

Сделать get запрос C++

Недавно начал изучать C++, моя цель на данный момент научиться работать с http запросами, но я попал в тупик, куда не посмотри, реализация http запросов уж очень закручена.

Составьте get запрос максимально просто. Получать ответ от страницы не нужно.

Пример ссылки для get-запроса

Ссылка скрыта от гостей

pp11

Green Team
16.09.2018 202 82 BIT 0

Копайте в сторону WinInet.
Ключевые слова: HINTERNET, InternetOpen, HttpSendRequest, HttpOpenRequest, InternetReadFile, WinApi.
В интернете куча готовых примеров, документаций и объяснений. Даже на русском языке.

centr

Green Team
31.01.2017 408 475 BIT 0

GitHub — libcpr/cpr: C++ Requests: Curl for People, a spiritual port of Python Requests.

C++ Requests: Curl for People, a spiritual port of Python Requests. — GitHub — libcpr/cpr: C++ Requests: Curl for People, a spiritual port of Python Requests.

#include int main(int argc, char** argv) < auto r = cpr::Get(cpr::Url, cpr::Authentication, cpr::Parameters, >); r.status_code; // 200 r.header["content-type"]; // application/json; charset=utf-8 r.text; // JSON text string >
#include #include int main(int argc, char** argv) < auto response = cpr::Get(cpr::Url); std::cout

GitHub - elnormous/HTTPRequest: Single-header C++ HTTP request class

Single-header C++ HTTP request class. Contribute to elnormous/HTTPRequest development by creating an account on GitHub.

#include "HTTPRequest.hpp" try < // you can pass http::InternetProtocol::V6 to Request to make an IPv6 request http::Request request("http://test.com/test"); // send a get request http::Response response = request.send("GET"); std::cout ); std::cout parameters = , >; response = request.send("POST", parameters, < "Content-Type: application/x-www-form-urlencoded" >); std::cout catch (const std::exception& e)

Ссылка скрыта от гостей

#include #include // RAII cleanup curlpp::Cleanup myCleanup; // Send request and get a result. // Here I use a shortcut to get it in a string stream . std::ostringstream os; os 
#include #include #include #include #include #include #include #include #include #include #include #include #include char http[]=; char host[]=; char parm[]=; std::string getProtocol( std::string url ) < std::string protocol = ""; int i = 0; for(i = 0; i < url.size(); i++) < if( url[i] != '/' || url[i+1] != '/' ) < protocol += url[i]; >else < protocol += "//"; break; >> return protocol; > std::string getHost( std::string url ) < std::string host = ""; url.replace(0, getProtocol(url).size(), ""); int i = 0; for(i = 0; i < url.size(); i++) < if( url[i] != '/' ) < host += url[i]; >else < break; >> return host; > std::string getAction( std::string url ) < std::string parm = ""; url.replace(0, getProtocol(url).size()+getHost(url).size(), ""); int i = 0; for(i = 0; i < url.size(); i++) < if( url[i] != '?' && url[i] != '#' ) < parm += url[i]; >else < break; >> return parm; > std::string getParams( std::vector < std::pair< std::string, std::string>> requestData ) < std::string parm = ""; std::vector< std::pair< std::string, std::string>>::iterator itr = requestData.begin(); for( ; itr != requestData.end(); ++itr ) < if( parm.size() < 1 ) < parm += ""; >else < parm += "&"; >parm += itr->first + "=" + itr->second; > return parm; > std::string GET( std::string url, std::vector < std::pair< std::string, std::string>> requestData ) < std::string http = getProtocol(url); std::string host = getHost(url); std::string script = getAction(url); std::string parm = getParams( requestData ); char buf[1024]; std::string header = ""; header += "GET "; header += http + host + script + "?" + parm; header += (std::string)" HTTP/1.1" + "\r\n"; header += (std::string)"Host: " + http + host + "/" + "\r\n"; header += (std::string)"User-Agent: Mozilla/5.0" + "\r\n"; //header += (std::string)"Accept: text/html" + "\r\n"; header += (std::string)"Accept-Language: ru,en-us;q=0.7,en;q=0.3" + "\r\n"; header += (std::string)"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" + "\r\n"; header += (std::string)"Connection: keep-alive " + "\r\n"; header += "\r\n"; int sock; struct sockaddr_in addr; struct hostent* raw_host; raw_host = gethostbyname( host.c_str() ); if (raw_host == NULL) < std::coutsock = socket(AF_INET, SOCK_STREAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(80); bcopy( (char*)raw_host->h_addr, (char*)&addr.sin_addr, raw_host->h_length ); if( connect( sock, (struct sockaddr *)&addr, sizeof(addr) ) < 0) < std::cerrchar * message = new char[ header.size() ]; for(int i = 0; i < header.size(); i++) < message[i] = header[i]; >send(sock, message, header.size(), 0); recv(sock, buf, sizeof(buf), 0); std::string answer = ""; for(int j = 0; j < 1024; j++) < answer += buf[j]; >return answer; >

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *