HTML-данные, отправленные через HttpWebRequest в vb.net, становятся пустыми, когда попадают в php $ _POST - PullRequest
1 голос
/ 02 мая 2011

Справочная информация: я выполнял междоменные вызовы ajax со страницы, предназначенной только для HTML (без программирования сервера), до бэкэнда PHP в другом домене. В какой-то момент я понял, что не могу выполнить POST с кросс-доменом, поэтому решил, что мне нужен локальный прокси. К сожалению, PHP не доступен в этом домене, поэтому мне приходится прибегать к ASP.NET.

Итак, я создал очень быстрый и грязный прокси vb.net ... Он работает, за исключением одной очень важной детали. Если любое из моих полей формы содержит HTML, данные не отправляются в PHP (или PHP не получает их, я не уверен). На самом деле, переменная $ _POST существует, она просто пуста все время, как только она содержит то, что выглядит как HTML-код, такой как <p>. Это же поле, если оно не содержит тега HTML, будет работать нормально, и данные передаются на страницу PHP.

Это прокси-код, который я использую:

<%@ Page Language="VB" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Net" %>
<script runat="server">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            Dim displayValues As New StringBuilder()
            Dim postedValues As NameValueCollection = Request.Form
            Dim nextKey As String
            For i As Integer = 0 To postedValues.AllKeys.Length - 1
                nextKey = postedValues.AllKeys(i)
                If nextKey.Substring(0, 2) <> "__" Then
                    displayValues.Append("&" & nextKey)
                    displayValues.Append("=")
                    'displayValues.Append(postedValues(i))
                    displayValues.Append(Server.UrlEncode(postedValues(i)))
                End If
            Next

            ' here, both postedValues(2) and Request.Form("htmldata") contain the correct HTML data.
            Dim uri As New Uri("http://www.myotherdomain/folder/page.php")
            Dim data As String = displayValues.ToString
            'Here, data contains the correct HTML code along with the other POST variables.
            If (uri.Scheme = uri.UriSchemeHttp) Then
                Dim request As HttpWebRequest = HttpWebRequest.Create(uri)
                request.Method = WebRequestMethods.Http.Post
                request.ContentLength = data.Length
                request.ContentType = "application/x-www-form-urlencoded"
                Dim writer As New StreamWriter(request.GetRequestStream())
                writer.Write(data)
                writer.Close()

                Dim myResponse As HttpWebResponse = request.GetResponse()
                Dim reader As New StreamReader(myResponse.GetResponseStream())
                Dim responseString As String = reader.ReadToEnd()
                myResponse.Close()
                Response.Write(responseString)
            End If
        End If
    End Sub
</script>

О стороне PHP, все, что я делаю, это $var = $_POST["htmldata"];, а $var всегда пусто. Я бы привел пример моего PHP, но я не знаю, насколько он необходим. $_POST["action"], например, содержит правильное действие, которое я ожидаю, так что это не сам код PHP, что неправильно.

Кто-нибудь знает, что здесь происходит?

=== РЕДАКТИРОВАТЬ ===

Что ж, если вы закодируете HTML так, чтобы HTML-сущности правильно передавались (не как &lt;), это работает!

Позвольте мне назвать это: n00b! : Р

(фиксированный код)

1 Ответ

0 голосов
/ 03 мая 2011

После некоторого исследования кажется, что я забыл закодировать данные HTML с помощью Server.URLEncode (эквивалентный encodeURI в javascript).Вот решение этой проблемы.

...