2016-01-26 4 views
0

Я пытаюсь написать конкретный запрос на завивание в 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;"

ответ

1

Моя лучшая рекомендация будет прокси оба запроса через что-то вроде tcpmonhttp://archive.apache.org/dist/ws/tcpmon/1.0/ (в основном запустить сервер и указать на локальном хосте, и иметь tcpmon перенаправить запрос на striketracker.highwinds.com). Попробуйте это из завитка и из вашего источника, и вы сможете увидеть, что отличается от запросов.

+0

Благодарим за помощь! Я установил tcpmon в качестве прокси-сервера, чтобы прослушивать порт 4000, и для его отправителя указать эту конечную точку: «https://striketracker.highwinds.com/api/accounts/{accountid}/purge». Я запускаю веб-сервер и говорю ему, чтобы сделать запрос на «http: // localhost: 4000», однако я получаю сообщение об ошибке в tcpmon: «java.net.MalformedURLException: no protocol». Любая помощь? – jre247

+0

Не использовать отправителя - по крайней мере, пока нет. Нажмите «Admin», измените «порт прослушивания» на что-то неиспользуемое на вашем компьютере (6005?) Установите «целевое имя хоста» на «striketracker.highwinds.com», а целевой порт - на «443». Затем повторите попытку свернуть, но замените «striketracker.highwinds.com» на «localhost: 6005». Одна из проблем, которые, как я думаю, у вас будет, это то, что она, вероятно, покажет данные, проходящие через зашифрованные. Если это так, нажмите 80 вместо 443, и если это не сработает, измените порт 80 на любом известном сервере. –

+0

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

Смежные вопросы