c # — WebBrowser.Navigate отправка данных поста в переполнение стека

У меня есть простая программа cli, которая получает MAC-адрес и имя компьютера, создает строку сообщения, содержащую эту информацию, и пытается отправить ее через POST с помощью метода .net WebBrowser.Naviate. Кажется, что все работает, за исключением отправляемых данных POST. Всякий раз, когда я распечатываю содержимое массива PHP Post, я получаю пустой массив. Я где-то пропустил шаг?

Консольное приложение C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
using System.Net.NetworkInformation;
using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web;
using System.Windows.Forms;
using System.Threading;namespace machine_boot
{
class Program
{
static void Main(string[] args)
{
try
{

// Get the system mac address
string theMac = GetMacAddress();

System.Threading.ThreadStart objThreadStart = delegate
{

string postData = "mm=" + theMac + "&mn=" + System.Environment.MachineName;
WebBrowser browserObject = new WebBrowser();
browserObject.Navigate(
"https://siteurl.com/test.php",
"_blank",
System.Text.Encoding.UTF8.GetBytes(postData),
"Content-Type: application/x-www-form-urlencoded" + Environment.NewLine
);

};
Thread theThread = new Thread(objThreadStart);
theThread.SetApartmentState(ApartmentState.STA);
theThread.Start();

}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine("Contact an administrator");
Console.WriteLine();
Console.WriteLine("Press any key exit...");
Console.ReadLine();
}}

/// <summary>
/// Finds the MAC address of the NIC with maximum speed.
/// </summary>
/// <returns>The MAC address.</returns>
static string GetMacAddress()
{
const int MIN_MAC_ADDR_LENGTH = 12;
string macAddress = string.Empty;
long maxSpeed = -1;

foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{

string tempMac = nic.GetPhysicalAddress().ToString();
if (nic.Speed > maxSpeed &&
!string.IsNullOrEmpty(tempMac) &&
tempMac.Length >= MIN_MAC_ADDR_LENGTH)
{
maxSpeed = nic.Speed;
macAddress = tempMac;
}
}

return macAddress;
}

}

/*
* The class we map the json server response to
*/
[DataContract]
public class ServerResponse
{
[DataMember]
public string machineurl { get; set; }
}

}

siteurl.com/test.php

echo "<pre>";
echo var_export($_POST, true);

введите описание изображения здесь

ОБНОВИТЬ

Я нашел файл access.log для apache и провел некоторые эксперименты. Я нашел первоначальный запрос POST:

"POST /test.php HTTP/1.1" 200 0 325 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

Затем я удалил второй параметр get из переменной postData, чтобы увидеть, изменился ли размер запроса, что, как вы можете видеть ниже, изменилось:

"POST /test.php HTTP/1.1" 200 0 296 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

Итак, я знаю, что выполняется запрос POST, и что данные POST содержатся внутри запроса. Может ли быть проблема с анализом apache байтового массива? Также стоит отметить, что каждый раз, когда делается запрос POST, сразу же делается дополнительный запрос GET, после чего я подумал, что это странно:

"POST /test.php HTTP/1.1" 200 0 325 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko""GET /test.php HTTP/1.1" 200 0 269 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

0

Решение

Я думаю, что вы должны потерять ? в начале postData,

Вопросительный знак используется для отделения пути от параметров запроса в запросе GET.

Для запроса POST, в частности применение / х-WWW-форм-urlencoded что вы используете, вам просто нужно передать URL-кодированные параметры, формируя key=value пары, разделенные &, Нет необходимости ?,

Также попробуйте изменить последний аргумент на "Content-Type: application/x-www-form-urlencoded" + Environment.NewLine,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]