Я пытаюсь написать конкретный запрос на завивание в C#, и я продолжаю получать ответ сервера 500 с сервера. Этот запрос на завивки, по существу, делает запрос на отправку в API компанией Highwinds. Этот запрос отправляет данные json и устанавливает заголовок маркера Auth Bearer.Запрос Curl, написанный на C#, не работает
Это локон запрос, который отлично работает (обратите внимание, что я заменил мой фактический маркер носителя с {маркером} и моим фактическим счет ид с {ACCOUNTID} запутать эту информацию):
curl -H "Authorization: Bearer {token}" -H "Content-Type: application/json" -d "@data.json" "https://striketracker.highwinds.com/api/accounts/{accountId}/purge"
Вот код C#, который дает мне общую ошибку сервера 500 из API Highwinds (обратите внимание, что я заменил текущий токен-носитель на {токен}, мой фактический идентификатор учетной записи с {accountId} и URL-адрес в строке json с {url }, с тем чтобы обмануть эту личную информацию):
var accountId = "{accountId}";
var purgeURI = string.Format("https://striketracker.highwinds.com/api/accounts/{0}/purge", {accountId});
var query =
@"{""list"": [{""url"": ""{url}"",""recursive"": true}]}";
var token = {token};
using (var httpClient = new HttpClient())
{
var url = new Uri(purgeURI);
using (var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url))
{
httpRequestMessage.Headers.Add(System.Net.HttpRequestHeader.Authorization.ToString(),
string.Format("Bearer {0}", token));
httpRequestMessage.Content = new StringContent(query,
Encoding.UTF8,
"application/json");
await httpClient.SendAsync(httpRequestMessage).ContinueWith(task =>
{
var response = task.Result;
var blah = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
});
}
}
Спасибо!
* Обновление: Следующая строка кода была добавлена для удаления заголовка Expect, который HttpRequest добавляет к запросу по умолчанию. После удаления этого заголовка я смог получить API Highwinds, чтобы принять запрос без бомбардировки.
"request.ServicePoint.Expect100Continue = false;"
Благодарим за помощь! Я установил tcpmon в качестве прокси-сервера, чтобы прослушивать порт 4000, и для его отправителя указать эту конечную точку: «https://striketracker.highwinds.com/api/accounts/{accountid}/purge». Я запускаю веб-сервер и говорю ему, чтобы сделать запрос на «http: // localhost: 4000», однако я получаю сообщение об ошибке в tcpmon: «java.net.MalformedURLException: no protocol». Любая помощь? – jre247
Не использовать отправителя - по крайней мере, пока нет. Нажмите «Admin», измените «порт прослушивания» на что-то неиспользуемое на вашем компьютере (6005?) Установите «целевое имя хоста» на «striketracker.highwinds.com», а целевой порт - на «443». Затем повторите попытку свернуть, но замените «striketracker.highwinds.com» на «localhost: 6005». Одна из проблем, которые, как я думаю, у вас будет, это то, что она, вероятно, покажет данные, проходящие через зашифрованные. Если это так, нажмите 80 вместо 443, и если это не сработает, измените порт 80 на любом известном сервере. –
Вы пытаетесь увидеть, что отправляется завиванием и что отправляется вашим приложением, поэтому ответ не имеет большого значения до тех пор, пока он есть. –