C # Размещение данных в сценарии CGI работает, если включен прокси-сервер Fiddler, иначе - PullRequest
1 голос
/ 20 мая 2019

Мне нужно отправить данные в скрипт cgi методом POST.Если я попробую свой код с включенным захватом fiddler, он будет работать, если я выключу fiddler, он не будет работать.Почему это странное поведение?

Сценарий cgi находится на смс-машине, которая отправляет SMS.Если я запускаю свой код из Visual Studio 2019 с запущенным процессом внешнего фиддлера, я правильно получаю этот ответ: errno=0&desc=SMS Queued&SmsIndex=4

Если я закрываю фиддлер и запускаю свой код, я получаю ошибку: errno=2&desc=Destination number missing.

Я также выяснил, что если я остановлю fiddler от захвата http-трафика и установлю в своем коде WebProxy на http://localhost:8888, это будет работать ... НО, если я закрою fiddler, это отключит прокси имой код больше не работает.

Мне нужно опубликовать данные без прокси-сервера, как я могу это сделать?

Я пробовал как с объектами .NET Framework, так и с RestSharp: та же проблема!Это мой код .NET Framework код:

Dictionary<string,string> smsData = new Dictionary<string, string>{
                { "num", number },
                { "text", text },
                { "Push", push.ToString() },
                { "Pwd", password },
};

FormUrlEncodedContent formUrlEncodedContent = new FormUrlEncodedContent(smsData);            

HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "http://" + ip + "/smssend.cgi");            
httpRequestMessage.Content = formUrlEncodedContent;

HttpResponseMessage res = _httpClient.SendAsync(httpRequestMessage).Result;
return res.Content.ReadAsStringAsync().Result;

Это мой код .NET Framework с библиотекой RestSharp:

 RestClient client = new RestClient("http://" + ip + "/smssend.cgi");
 RestRequest request = new RestRequest("", Method.POST);
 request.AddParameter("num", number);
 request.AddParameter("text", text);
 request.AddParameter("Push", push.ToString());
 request.AddParameter("Pwd", password);
 RestResponse response = (RestResponse) client.Execute(request);
 return response.Content.ToString();

1 Ответ

0 голосов
/ 20 мая 2019

Я решил с помощью TcpClient и NetworkStream

...