2011-05-02 5 views
1

배경 정보 : HTML 전용 (서버 프로그래밍 없음) 페이지에서 PHP 백엔드로 크로스 도메인 아약스 호출을 수행하고 있습니다. 다른 도메인. 저는 한 번에 크로스 도메인으로 POST를 할 수 없다는 것을 깨달았습니다. 그래서 나는 로컬 프록시가 필요하다는 것을 알았습니다. 불행히도 PHP는 해당 도메인에서 사용할 수 없으므로 ASP.NET에 의존해야합니다.

그래서 저는 매우 빠른 & 더러운 vb.net 프록시를 만들었습니다 ... 하나의 매우 중요한 세부 사항을 제외하고는 작동합니다. 양식 필드에 HTML이 포함되어 있으면 데이터가 PHP로 전송되지 않습니다 (또는 PHP가 데이터를받지 못했습니다. 확실하지 않습니다). 실제로 $ _POST 변수가 존재합니다. <p>과 같은 HTML 코드처럼 보이면 항상 비어 있습니다. 같은 필드에 HTML 태그가 없으면 제대로 작동하며 데이터는 PHP 페이지로 전달됩니다. 내가 뭘 모든 $var = $_POST["htmldata"];입니다

<%@ 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는 항상 비어 :

내가 사용하고 프록시 코드입니다. 내 PHP의 예를 들겠지만, 그것이 necerssary인지 모르겠다. 예를 들어 $_POST["action"]에는 내가 바라는 바른 동작이 포함되어 있으므로 잘못된 PHP 코드 자체는 아닙니다.

여기에 무슨 일이 일어나는 지 아는 사람이 있습니까?

=== 당신이 그렇게 HTML 개체가 제대로 (안 &lt; 등)에 전달되는 HTML을 인코딩하는 경우 편집 ===

음, 작동!

전화 해주세요 : n00b! : P

(고정 코드) 몇 가지 조사 후

+0

'print_r ($ _REQUEST);'을 실행하고 여기에 아무것도 있는지보십시오. 이것은 GET 및 POST 데이터를 표시해야하며 VB 코드에서 PHP로 전달되는 것이 있는지 여부를 알 수 있어야합니다. – DaOgre

+0

DaOgre,'print_r ($ _REQUEST);'내가 기대 한 것 :'Array ([ jsoncallback] => abc123blahblahblah [loginCookie] => 234i5uy9a8fd6ybuoihqq4 [page] => Welcome.html [htmldata] =>)'이므로 비어 있습니다. –

+0

조금 뒤죽박죽을 한 후에 내가 찾는 것을 여기에 있습니다. 실제로 멈추게하는 것은 모든 HTML 엔티티가 아닙니다. 방금 내 모든 HTML 테스트가 <으로 시작되었다는 사실을 깨달았습니다. &는 내 문자열에서 새 변수의 시작입니다 (결코 표시되지 않으므로 표시되지 않습니다). 그래서 앰퍼샌드 구분 문자열 대신 POST 데이터를 보내는 또 다른 방법이 있다면 궁금합니다 ... –

답변

0

는, 내가 Server.URLEncode가 (자바 스크립트에 encodeURI에 해당)으로 HTML 데이터를 인코딩하기 위해 잊고 있었던 것 같다. 이것이 바로이 문제에 대한 해결책입니다.

관련 문제