Справочная информация: я выполнял междоменные вызовы 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-сущности правильно передавались (не как <
), это работает!
Позвольте мне назвать это: n00b! : Р
(фиксированный код)