【问题标题】:pass string from C# Windows Form Application to php webpage将字符串从 C# Windows 窗体应用程序传递到 php 网页
【发布时间】:2011-10-18 13:27:35
【问题描述】:

如何将一些数据从 C#.net 传递到网页?我目前正在使用这个:

ProcessStartInfo p1 = new ProcessStartInfo("http://www.example.com","key=123");
Process.Start(p1);

但是如何从 PHP 访问它?我试过了:

<?php echo($_GET['key']); ?> 

但它什么也没打印。

【问题讨论】:

  • &lt;?php echo $_REQUEST['key']; ?&gt; 带给你什么?

标签: c# php


【解决方案1】:

尝试使用 url 本身传递它

ProcessStartInfo p1 = new ProcessStartInfo("http://timepass.comule.com?key=123","");  
Process.Start(p1);

【讨论】:

  • 如果 URL 变量不像 123 那样干净(例如用户文本输入),请不要忘记转义 URL 变量
  • 我实际上是在发送产品密钥。我不想将产品密钥作为查询字符串传递,即使是加密格式。
  • 我不确定您是否可以通过 Web url 将数据传递到您的 Web 服务器,而无需使用 GET 或 POST 参数。相反,您可以尝试通过 SSL 使用带有 WSDL 文件的 Web 服务。或者您可以将这个特定的 URL 设为 SSL。但它仍然以加密格式传递 url。
  • 这意味着加密的密钥将显示在 URl 中,如果我使用你所说的..?
  • 是的,但是对于 SSL,这些值是不可逆的。如果不能实现SSL,可以实现一些加密算法,在另一端解密。
【解决方案2】:

您应该将关键参数作为查询字符串:

ProcessStartInfo p1 = new ProcessStartInfo("http://timepass.comule.com?key=123");

【讨论】:

    【解决方案3】:

    我建议使用 HttpWebRequestClass。

    http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

    这样,您还可以将数据发布到您的页面、添加身份验证参数、cookie 等 - 以备您需要时使用。

    我不确定这在您的特定设置中是否重要,通过查询字符串传递数据是不安全的。但如果安全性也是一个问题,我会通过 SSL 连接发布数据。

    更新:

    所以如果你像这样将数据发布到你的 php 页面:

    string dataToSend = "data=" + HttpUtility.UrlEncode("this is your data string");
    var dataBytes = System.Text.Encoding.UTF8.GetBytes(dataToSend);
    
    HttpWebRequest req = (HttpWebRequest) WebRequest.Create("http://localhost/yourpage.php");
    req.ContentType = "application/x-www-form-urlencoded";
    req.ContentLength = dataBytes.Length;
    req.Method = "POST";
    
    using (var stream = req.GetRequestStream())
    {
        stream.Write(dataBytes, 0, dataBytes.Length);
    }
    
    // -- execute request and get response
    HttpWebResponse resp = (HttpWebResponse) req.GetResponse();
    if (resp.StatusCode == HttpStatusCode.OK)
        Console.WriteLine("Hooray!");
    

    您可以在您的 php 页面中使用以下代码来检索它:

    echo $_POST["data"]) 
    

    更新 2:

    AFAIK,ProcessStartInfo/Process.Start() 实际上启动了一个进程——在这种情况下,我认为它会启动你的浏览器。第二个参数是命令行参数。程序使用此信息,以便它们知道启动时的行为(隐藏、打开默认文档等)。无论如何,它与查询字符串无关。如果您更喜欢使用 Process.Start(),请尝试以下操作:

    ProcessStartInfo p1 = new ProcessStartInfo("iexplore","http://google.com?q=test");
    Process.Start(p1); 
    

    如果你运行它,它将打开 Internet Explorer 并在搜索框上打开带有测试的 google。如果那是你的页面,你可以通过调用访问“q”:

    echo $_GET["q"]) 
    

    【讨论】:

    • 我不想使用querystring,因为它会在网页打开时显示在url中,我可以使用加密格式但不是。
    • 那么你最好的选择是使用发布数据
    【解决方案4】:

    在我的应用程序中,我使用了不同的方法,即使用 webClient 我做到了

    WebClient client1 = new WebClient();
    string path = "dtscompleted.php";//your php path
    NameValueCollection formData = new NameValueCollection();
    byte[] responseBytes2=null;
    formData.Add("key", "123");
    try
     {
          responseBytes2 = client1.UploadValues(path, "POST", formData);
     }
    catch (WebException web)
     {
          //MessageBox.Show("Check network connection.\n"+web.Message);
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-08
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多