Вопросы с меткой [httpclient]


Делаю пост запрос, устанавливаю куки сайта, все равно не пропускает

httpclient c#

Ответить

ответов 0

0

там кроме кук браузер много всякого ещё отправляет. Например, те же заголовки. И это, разве у инсты нет своего API?

0

Я пытаюсь без API сделать. А разве заголовки он автоматически не устанавливает, которые браузер дает

0

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

Как получить перенаправление на страницу после post

httpclient c#

Ответить

ответов 0

0

Отправили запрос - получили данные. В данных либо ключ авторизации, с которым вы делаете GET запросы на сайт, либо все необходимое вам. В чем проблема у вас? P.S. Это случаем не вы? Уж прям подозрительно по одному направлению идете...

0

Нет, это вообще другая тематика вопроса

0

Не сказал бы, человек также хочет отправить POST и получить данные, использует даже ссылки, которые я встречал в ваших вопросах. Ну да ладно, проблема то в чем?

0

Ну может он смоих вопросов смотрел и взял, он как я понял html получить хочет, а мне нужна переадресация на другую страницу. Я отправляю post, получаю {"result":{"Success":true}}, я до сих пор пытаюсь нажать кнопку входа на авито. Я понимаю что там ссылка меняется, но возможно ли сделать так, чтобы он сам меня перенес туда, или выдал эту ссылку после post, в консоли

0

Прочитайте первый мой комментарий. Есть разные запросы и разные ответы, некоторые возвращают сразу данные, некоторые вспомогательную информацию, некоторые дают ключ доступа. Сайты обычно как работают: Вы зашли (GET) - Он отдал вам "заглушку", некую HTML страничку, которая содержит только места, куда будет подгружен контент и скрипты, которые этот контент подгружают (JS). Когда страница загружена, начинают работать те самые JS скрипты, они отправляют POST/GET запрос на некий адрес с некими параметрами - тот адрес возвращает необходимые данные ответом.

0

То есть там нет редиректа (у API) и если вам сервер выдал {"result":{"Success":true}}, то смотрите что он вам дополнительно с этим выдал (Cookie, может заголовок или еще что). Либо смотрите, что делает уже сам сайт, когда получает true от API.

0

Понял, спасибо, пороюсь тогда в заголовках, которые выдает

После отправки POST запроса, получить измененную html(Измененную POST запросом)

Ответить


0

А сами что пробовали? Ведь это дело персональное и каждый сайт по разному требует данные. Да и вообще, даже тут, на SO уйма ответов на эту тему, пробовали хоть искать?

0

Пробовал, нашел сайт с запросом, но когда я воспроизвожу этот код, и беру сноваю url, у меня дает страницу без моего post, вопрос обновил, добавил код

0

Ок, уже лучше... Я зашел на сайт https://spark.ru/blogs/general, что программа должна там получить?

0

я вопрос как бы отредактировал, вот код, если я опять беру эту страницу, то данные понятно без пост запроса, как мне после пост запроса получить дальше ту страницу, на которой POST запрос был выполнен

0

Я в вашем коде вижу только кучу не пойми чего, вы зачем то отправляете GET запрос на сайт coursera.org, затем отправляете POST запрос с неведомыми данными в яндекс метрику и затем отправляете GET запрос на spark.ru. Вот мы видя это все что должны понять?

0

Я добавил картинку. Делаю Get запросы, чтобы сравнить, забыл убрать их. Там только второй Get запрос нужно было оставить. 2ой гет запрос , я пыытаюсь получить страницу с отправленным post

1

А где вы там увидели POST запрос? Если вы хотите получить эти менюшки, то они находятся все в HTML страницы, которую сайт отдает без проблем обычным GET запросом. Сами кнопки - это простые ссылки, которые при клике редиректят на адрес, который указан в href.

0

Если надо манипулировать страницей, обратите внимание на старый добрый класс WebBrowser (API Internet Explorer). В противном случае вам подойдет обычный WebRequest, а как парсер HTML очень популярен NuGet пакет HtmlAgilityPack. По всем перечисленным классам есть бесконечное количество примеров на StackOverflow. И не помешает минимальное понимание того, как работает HTTP, и чем GET отличается от POST.

0

Я понимаю чем Get от POST отличается. Я хотел бы, отправить POST запрос, и получить url с изменением, который сделал POST(например подгрузка js). А парсю AngleSharp. Вы хотите сказать, что httpclient не отдаст мне страницу с изменениями? Просто я слышал, что WebRequest устарел, и им мало кто пользуется

0

Да о каком POST запросе идет речь? Какие изменения вы хотите получить, вы можете толком объяснить?

0

Например, есть сайт, на котором при нажатии на кнопку генерируется текст, как я понял, они в основном генерируются пост запросами либо клик идет пост запросом, раз это так, то мне нужно получить сайт с сгенерированым текстом, то есть отправленным post(нажатой кнопкой)

0

@Gokor8 спасибо, не знал об устаревании, но я и не советовал устаревний конструктор, я имел в виду как раз WebRequest.Create(), который в свою очередь, вроде-как еще актуален. Просто из вашего вопроса не было до конца понятно, в чем именно задача, и что за каша из запросов в коде. Пожалуйста отредактируйте свой вопрос так, чтобы там появилась дополнительная информация, которую мы выяснили в комментариях, и уберите пожалуйста лишнее из кода.

1

Тогда для чего мы сейчас потратили час, если у вас сайт совершенно другой и не как не относится к тому, что указан в вопросе? Я вам самым первым комментарием написал, что каждый сайт уникален и работает по своим принципам, вы должны эти принципы понять, понять как он работает, отловить этот POST запрос сами. Например некоторые сайты требуют JSON тело запроса, где указывается например, страница. Другие сайты требуют данные в виде формы. Какие то сайты отдают JSON данные в виде ответа, какие то HTML, какие то XML. Какие то сайты требуют Cookie, другие определенный заголовок, а кто то и все разом

1

@aepot Почитайте документацию - Не рекомендуется использовать WebRequest или производные классы для новой разработки. Вместо этого используйте класс System.Net.Http.HttpClient.. Все, что базируется на WebRequest (а это сам класс, WebClient, ну и другие.) давно не поддерживается Microsoft и признаны устаревшими классами, которые в дальнейшем, скорей всего попросту выпилят из .NET. Новый класс, который предназначен для работы с запросами - HttpClient и если идет разработка с нуля, то стоит использовать его!

0

Я знаю, поэтому вопрос перестроил

0

@EvgeniyZ век живи - век учись. Спасибо за информацию, уже закопался туда.

0

@Gokor8 Давайте мы сделаем проще, я дам вам это и это, там достаточно информации для понятия того, как работать с сайтами и как отправить нужный запрос. Дальнейшее обсуждение текущего вопроса я лично не вижу смысла, ибо вы не предоставляете нам подробной информации о том, что хотите и не хотите понимать то, что каждый сайт УНИКАЛЕН и требует свой подход.

0

Спасибо, ответ который в 1 ссылке, как раз и нужен был мне

0

@EvgeniyZ коммент про "это и это" реально полезный и может считаться ответом. Быть может, его скопируете в пост с ответом?

0

@aepot А что вы от туда хотите скопировать? Копировать все - дубликат и уж лучше закрыть как дубликат. Копировать часть - а какую? Ведь автору надо по сути все от туда для полной картины. Я лично давать тут ответ не буду, ибо без понятия что надо автору. Вы можете на основе моих ответов составить что то свое, я не против. Ну или автор пусть напишет то, что в итоге понял и получил. Я лично проголосовал за закрытие вопроса, как "не понятный".

0

@EvgeniyZ я ничего не хочу копировать, я вам предложил скопировать ваш же ответ из комментария в пост для ответа. Чтобы задающий его мог отметить как правильный, и вопрос был закрыт. Но я не настаиваю. :)

0

@EvgeniyZ Да что непонятного! Мне нужен метод, который даст мне страницу после отправленного мною POST запроса. Например post запрос который я отправляю, подгружает текст, мне нужно взять страницу с подгруженным текстом, то есть страницу, после отправленного post

0

А вы понимаете, что если у вас есть AngleSharp то вам не нужно получать страницу после отправленного запроса? Библиотека умеет выполнять Javascript (1), нажимать на кнопки, отправлять формы... Тоже самое и старый добрый WebBrowser

Отправляю POST запрос по гайду, он выдает ошибку 404 не найденно

httpclient post c#

Ответить

ответов 0

3

POST https://www.coursera.org/eventing/infoBatch.v2 и значение в string loginURI хоть немного похожи по вашему?

0

Спасибо, пздц я тупые ошибки делаю, не проверив всего, сорри

HttpClient вызывает TaskCanceledException

httpclient .net-core c#

Узнать ответ

ответов 1

0

Текст исключения? Трассировка стека?

0

Это так срабатывает таймаут.

0

@tym32167 Обновил вопрос

Может кто-то по подробнее рассказать о методах POST отправки через httpclient

Узнать ответ

ответов 1

0

От куда вы берете все это? https://www.avito.ru/api/1/stats/frontend/fps HTTP/1.1 - похоже на логин и пароль?

0

c fiddler, при нажатии на кнопку регистрации, один из запросов, который показывается в raw

0

у меня стоит ссылка на ввод логина и пароля, я хочу нажать на кнопку регистрации, пытаюсь POST сделать. Можно было бы просто ссылку поменять, скажите вы, я знаю, но для понимания я решил с авито попробовать, чтобы кнопки по прожимать postами

0

у меня стоит ссылка на ввод логина и пароля, я хочу нажать на кнопку регистрации, пытаюсь POST сделать

1

Ну так найдите нужный запрос, а то вы на адрес отправляете адрес, ну подумайте хоть немного что вы делаете! P.S. Я не думаю, что у вас получиться пройти авторизацию там таким способом, ибо каждый запрос требует reCaptcha.

0

ок, попробую, спасибо

Корректное использование HttpClient

Ответить

ответов 0

0

В чем вопрос? И о каком сервисе вы пишете?

0

Извиняюсь, видимо до конца не уточнил. При большей нагрузке на сервер,стоит ли как то оптимизировать запросы ? Сервис я сам создаю для интеграции между клиентом и компаниями.

0

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

0

К тому же не очень ясно, как httpclient поведет себя при многопоточной нагрузке. Может оптимизации из той статьи имеют смысл, а может и нет, это надо проверять и замерять конкретно на вашем проекте.

0

Про это написано в документации кстати HttpClient предназначено для однократного создания и повторного использования в течение всего жизненного цикла приложения. При создании экземпляра класса HttpClient для каждого запроса будет исчерпано количество сокетов, доступных при высоких нагрузках. Это приведет к ошибкам SocketException..

0

Почитал документацию, но там приводится пример именно со static HttpClient. Всё же использовать static у моём сервисе приведёт к ошибке, данные не будут записаны верно, несколько клиентов могут постучаться на контроллер, и к этому времени static HttpClient уже вернёт ответ от API, один и тот же респонс будет для нескольких клиентов, поэтому буду использовать только создание var client = new HttpClient().

0

Один объект - не обязательно static. Я бы создал некий класс-обертку, который бы имел в себе объект клиента и необходимые методы отправки. Данный класс был бы "одиночкой" (singleton), который бы жил все время работы приложения (или неким сервисом для IoC с пометкой "singleton"). Все, дальше через него я уже делал все свои запросы. Но тут увы, я не проверял, лишь говорю, как бы поступил я. P.S. Если вы хотите уведомить человека о своем сообщение, то напишите его ник через @, ибо я совершенно случайно зашел сюда и увидел активность.

Получение сожержимого Web страницы с задержкой (после полной загрузки)

Ответить

ответов 0

0

Не выйдет, там же загрузка контента через ajax, а это javascript. Смотрите в сторону каких нибудь браузерных движков, которые умеют JS.

0

Или смотрите откуда страничка качает данные для таблицы и вместо того, чтобы дергать страничку, качайте данные напрямую.

1

Как же я устал людей отговаривать от неправильных действий в виде селениума и других ненужных агрегаторов. Это же в 90% лишнее, совсем! Будто вы хотите прихлопнуть комара, но у вас не получается и вы запускаете ядерную ракету по городу. Почти любой подобный сайт отдает данные при помощи API и этот не исключение.

0

Возможный дубликат вопроса: Как парсить сайты с авторизацией?

0

@EvgeniyZ подскажите тогда, как получить данные из следующего запроса по (он идет через один после указанного вами) /ppa/api/rest/services/ppa/public/organizations/additionalin‌​fo . Это раздел дополнительной информации. Сервер просто так ее не отдает.

1

@MaximK Ну смотрите, это POST запрос. Открываете как показано в ссылке, что я вам давал программу Postman, заносите туда адрес, выбираете POST тип запроса, отправляете. В ответ вам сервер дает Cannot consume content type, думаем логически, Content type - это один из заголовков, пробуем поставить его таким, как на оригинальном запросе, отправляем и видим, что сервер теперь нам дает No content to map to Object due to end of input, то есть у нас нет контента. Тип контента мы задали в заголовке как application/json, значит и контент надо отправлять в виде JSON.

1

Идем в Body, ставим тип Raw (JSON) и копируем туда контент из запроса ({"organizationGuids":["c5a5aeb3-4c28-4558-b472-abfa87f98ec3‌​"]}), пробуем отправить и видим, что сервер нам успешно отдал все нужные данные. Исходя из этого, вам при отправке запроса нужно установить заголовок Content-Type и отправить данные в формате JSON. Кстати, вы используете давно устаревший класс HttpWebRequest, советую перейти на новый, созданный для этого класс HttpClient (об этом можете почитать в документации), а с ним вам и заголовки трогать даже не придется, лишь грамотное создание StringContent.

0

@EvgeniyZ спасибо! Очень ценный для меня совет!

Избежание ошибки 429 C#

Ответить

ответов 0

0

Используйте Post-запрос и вкладывайте text в Request body

0

А можно ссылку на пример? Я не очень силен в http, поэтому не особо понимаю.

0

@AndreiKhotko Для этого надо предварительно уточнить у топикстартера, его ли это сервер и отвечает ли он по POST - раз, также как на GET - два. У меня впечатление, что это не его сервер, а это проект по парсингу чужого сайта (типовое использование AngleSharp), иначе бы к себе API было бы какое-никакое. А значит, что не факт, что ваш способ подойдёт

0

@AK Так и есть. Я пытаюсь отправить запрос на гугл и получить ответ.

0

@SireIMPACTUS какой ответ вы хотите получить от google? Какой url используете и для каких целей вы посылаете такую большую строку?

Авторизация на сайте на языке C#

Ответить

ответов 0

1

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

4

Возможный дубликат вопроса: Как парсить сайты с авторизацией?

Исключение во время сериализации HTTP

response httpclient c#

Узнать ответ

ответов 1

1

А зачем исправлять при исключении, фактически уже после обработки, если можно сразу проверять и не получать исключение?

1

Я сталкивался как то с подобным, работая с одним "буржуйским" сайтом, который неверно писал кодировку, пришел к банальному - конвертировал прямиком полученные байты в нужную мне кодировку. Если что, подобная реализация есть в этом ответе.

0

@ГеннадийП т.е. каждый проверять и те 99% нормальные, теряя процессорное время ? Или дурной тон в catch проверять ? Я падаван в этом деле, а вы мои магистры xD Было бы здорово, если бы разъяснили.

1

@Vipz Проверка и замена по маленькому словарю занимает крайне мизерное время по сравнению с повторной задачей (в данном случае сериализация плюс другие задачи)

0

@EvgeniyZ понял вас, спасибо! Вот мне много таких попалось, даже вообще не дописанные значения. А такой вопрос на перёд, если я буду все извлекать в utf-8 - не будут ли на каких то иероглифы вылезать ? Допустим если windows-1251, а я его как utf-8 получу по вашему методу.

0

@ГеннадийП круто, понял что пытались мне донести, спасибо!

1

если я буду все извлекать в utf-8 - не будут ли на каких то иероглифы вылезать? - конечно будут. Вообще я бы на вашем месте нашел бы способ автоматически "детектить" кодировку полученных байтов, ну или делайте словарь, как вам уже дали ответ. Вот например нашел на EnSO ответ, который автоматически обнаруживает кодировку байтов и выдает преобразованный текст, вам достаточно заменить byte[] b = File.ReadAllBytes(filename); на параметр и заменить из моего ответа строки преобразования на это: _ = detectTextEncoding(bytes, out data);.

0

@EvgeniyZ конечно будут - исчерпывающий ответ. Спасибо! Буду теперь разбираться и думать. Всё же словарь в моём случае будет проще, чем детект xD Наверно даже просто двумя if 1251 и 8 буду вылавливать. Потому что другие я пока кодировки из 200к ссылок не встречал

Post и Get запросы

Ответить

ответов 0

1

А что сайт может не так выдать вам? Отправляйте правильный UserAgent, Referer, да и все, 99% сайтов выдадут вам все. Остальные же заголовки нужны лишь в единичных случаях, например Accept-Language - некоторые сайты через него проверяют какой язык страницы ставить для пользователя, либо есть Content-Type, которые тоже некоторые сайты обрабатывают и через него можно получить html/xml/json и др. форматы данных. Есть еще x заголовки, которые тоже часто используются сайтами для передачи чего либо. Вообще, первоначально с браузера отправляется это.

0

@EvgeniyZ - оО - здорово что именно вы обратили внимание на этот вопрос, я как раз изучая HttpClient - учусь на ваших примерах) 1 и 2 Проблема в том, что запихнув 50 сайтов, многие принудительно отклоняют Get запросы - не могу разобраться почему. Указываю User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0 и вот сайт для примера: случайный) браузеру доступный, httpclient выдаёт исключение.

1

Какую ошибку? Вот набросал за минуту пример, запустил и получил это. Как видите даже без заголовков и чего либо еще мне выдало полный контент страницы.

0

@EvgeniyZ Не могут же у меня при первом запросе к странице быть Referer и Cookie с помощью HttpClient - собственно как и у браузера. Что же тогда не пускает ? Перепробовал все заголовки кроме Referer и Cookie повторить - не пускает. Или для браузера при первом запросе к серверу он видит что нет Cookie и Referer, присваивает их и делает редирект чтобы проверить ?

1

Cookie используются в основном для авторизации, либо для защиты от подделки ответа. Предоставленный вами сайт не имеет чего либо. Я без понятия чего у вас там происходит, ибо как видите без заголовков и "печенек" сайт отдает мне контент. Вы кстати так и не сказали что за ошибка у вас. Ну а вообще, вы можете установить Fiddler и через него смотреть что отправляет ваше приложение и что отправляет браузер и так ищите виновника, ибо может у вас в браузере какое то расширение стоит для обхода блокировок каких то, может еще чего. Увы, я тут без заблокированного сайта вам помочь не смогу...

0

@EvgeniyZ пока писал) вы уже тест провели) Вот мой пример - что не так) prnt.sc/q7jdip

0

@EvgeniyZ вы виртуоз), действительно всё дело в расширении у браузера именно с этим сайтом, а я думал что то не так делаю(

0

@EvgeniyZ отключив расширение - выдал браузеру https://prnt.sc/q7jgmv

0

Ну тут либо у вас стоит блокировка у провайдера на данный сайт, либо у вас что то не так настроено, либо всеми любимый РКН старается (а он сейчас ох как за аниме взялся), либо у вас используется что то старое (браузер/в проекте старый .Net). Вот нарыл в интернете информацию, может поможет. Ну а так, это индивидуальный случай, это не проблема в заголовках и запросах)

C# асинхронная загрузка с прогрессом

Ответить

ответов 0

1

Используйте 3 WebClient и не парьтесь.

3

stackoverflow.com/q/20661652/5045688

AVM

Delphi 10.2: TNetHttpClient BeginInvoke / EndInvoke

httpclient delphi

Ответить

ответов 0

0

А почему вы не хотите использовать TTask из PPL?

0

Ну допустим, можно пример с TTask?

0

Примерно вот так, только Indy заменить на HttpClient.

0

Ну нормально, тоже может пригодиться, но хотелось бы разобраться с BeginInvoke / EndInvoke.

Ошибка при инициализации SSLConnectionSocketFactory при создании HttpClient. Ошибка NoSuchFieldError: INSTANCE

Ответить

ответов 0

0

На английском stackoverflow есть схожий вопрос: stackoverflow.com/q/22330848/1597497 Посмотрите, может поможет.