Фоновая информация. Я делал междоменные аякс-вызовы с HTML-only (без серверного программирования) страницы, на 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.
Кто-нибудь знает, что здесь происходит?
=== EDIT ===
Ну, если вы кодируете HTML, чтобы html-объекты были правильно переданы (не как <
), это работает!
Позвольте мне назвать это: n00b! :П
(Фиксированный код)
После некоторых исследований кажется, что я забыл кодировать данные HTML с помощью Server.URLEncode (эквивалент encodeURI в javascript). Это решение этой проблемы.