#c# #aws-api-gateway #amazon-cloudfront #dotnet-httpclient
Вопрос:
Я пытаюсь получить доступ к API из браузера, он возвращает данные правильно.
Ниже приведен вывод инструментов разработки Chrome — вкладка «Сеть».
GET /xxxxxxx/api/xxxxxxx/xxxxxxxxxxxxx?referencenumber=AVXD13198802469/1 HTTP/1.1 Host: xxxx.xxxxxxx.xxx Connection: keep-alive Cache-Control: max-age=0 sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: none Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Accept-Encoding: gzip, deflate, br Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,hi;q=0.7,te;q=0.6 Cookie: _ga=GA1.2.324340773.1637687185; _hjSessionUser_1162220=eyJpZCI6IjVjN2Q4ZjZiLTE3NGYtNWRlOS1iN2ZjLWFhMzU3NGJjYmFjNSIsImNyZWF0ZWQiOjE2Mzc2ODcxODUzMzYsImV4aXN0aW5nIjpmYWxzZX0=; OptanonAlertBoxClosed=2021-11-23T17:06:55.324Z; OptanonConsent=isGpcEnabled=0amp;datestamp=Tue Nov 23 2021 22:37:28 GMT+0530 (India Standard Time)amp;version=6.18.0amp;isIABGlobal=falseamp;hosts=amp;consentId=e2272ab8-8e01-4859-902a-e8e84fbe8b35amp;interactionCount=1amp;landingPath=NotLandingPageamp;groups=C0001:1,C0003:1,C0002:1,C0004:1amp;geolocation=;amp;AwaitingReconsent=false; AWSALB=hSe9Dtqo8cPvWzIyv/lT0nhcCJ822BzrFDng1sT fBBmde4CPOMbJJpCE3PESkURtsxxEGKsTwlnlN8ybLLed4pVYfE6tDiFKz9WD5fBYeydSBZw/k1tMkG /2fa; AWSALBCORS=hSe9Dtqo8cPvWzIyv/lT0nhcCJ822BzrFDng1sT fBBmde4CPOMbJJpCE3PESkURtsxxEGKsTwlnlN8ybLLed4pVYfE6tDiFKz9WD5fBYeydSBZw/k1tMkG /2fa; dtCookie=v_4_srv_3_sn_2832183B98BD4E50DD4D6456885CECA3_perc_100000_ol_0_mul_1_app-3A86e062a5b6c28a86_1_rcs-3Acss_0
но когда я пытаюсь выполнить тот же URL-адрес из приложения .net, он выдает ошибку 403. мой код .net выглядит следующим образом
public HttpResponseMessage SendRequestPostNew(string destinationMethod, string destinationURL,string requestContent,string TimeoutValue) { var httpClientHandler = new HttpClientHandler(); httpClientHandler.ServerCertificateCustomValidationCallback = delegate { return true; }; httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =gt; { return true; }; HttpClient clientNew = new HttpClient(httpClientHandler); try { using (var newRequest = new HttpRequestMessage(new HttpMethod(destinationMethod), destinationURL)) { newRequest.Headers.Accept.Clear(); newRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //newRequest.Content = new StringContent(requestContent, Encoding.UTF8, request.ContentType); newRequest.Content = new StringContent(requestContent, Encoding.UTF8, "application/json"); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; ServicePointManager.ServerCertificateValidationCallback =(sender, cert, chain, sslPolicyErrors) =gt; { return true; }; //System.Net.ServicePointManager.Expect100Continue = false; client.Timeout = TimeSpan.FromSeconds(Convert.ToInt32(TimeoutValue)); var response = clientNew.SendAsync(newRequest); { return response.Result; } } }catch(Exception ex) { throw ex; } finally { clientNew.Dispose(); } }
403 ОШИБКА
Просьба не могла быть удовлетворена.
Плохая просьба. В настоящее время мы не можем подключиться к серверу для этого приложения или веб-сайта. Возможно, слишком большой трафик или ошибка конфигурации. Повторите попытку позже или свяжитесь с владельцем приложения или веб-сайта.
Если вы предоставляете контент клиентам через CloudFront, вы можете найти инструкции по устранению неполадок и предотвращению этой ошибки, просмотрев документацию CloudFront.
Сгенерированный cloudfront (CloudFront) Идентификатор запроса: EXUpjNsCEJfyHq_q0PobrhVpOr1e3EfbH8grxVhVTsz036MSbIrkmg==
В чем может быть проблема?
Комментарии:
1. Обычно такие вещи, как отсутствие правильных заголовков, отсутствие файлов cookie или отсутствие javascript, который что-то делает после выяснения того, что человек использует страницу, возможно, в случае CF, все они и многое другое. Нам понадобится дополнительная информация, чтобы иметь возможность консультировать; откройте инструменты разработки браузера и посмотрите на вкладке сеть, чтобы узнать, что именно ваш браузер отправляет/как, когда он получит хороший ответ, тогда мы сможем определить, какие различия возникнут, когда ваш C# будет взаимодействовать с API
2. @CaiusJard, я добавил вывод инструментов разработки в вопрос
3. Ну, для начала, в версии браузера загружено больше заголовков, чем в версии c#..