我正在尝试在我的html前端和后端微服务之间创建一个反向代理。
如果没有代理服务器,代码可以正常工作。
文本被输入到前端,点击按钮后通过XMLrequest发送到php代理,然后通过cURL向python后端微服务发出get请求。我认为我的问题是发送get请求和输入文本。返回的结果是undefined,因为发送输入文本时有问题。我的前端返回“undefined”--所以至少我知道它们是连接的。
我在本地主机上运行代码,然后再停靠应用程序
如果有人有任何指点,将不胜感激!
前端
function Check_1() //total
{
input_text = document.getElementById('input-text').value;
let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var j = JSON.parse(this.response);
total_marks = j.answer;
displayTotal(total_marks);
}
};
xhttp.open("GET",proxyURL+"?input_text="+"/");
xhttp.send();
return;
}
<div>
<button class="sgcbutton-active" onclick="Check_1();">Total Marks</button>
</div>
代理人
<?php
header("Access-Control-Allow-Origin: *");
header("Content-type: application/json");
$output = array(
"error" => false,
"string" => "",
"answer" => 0
);
$SITE_NAME_1 = "http://localhost:90";
$input_text = $_REQUEST['input_text'];
$URL = $SITE_NAME_1."/?input_text=".$input_text;
//curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$URL);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
exit();
Python后端
import function
from flask import Flask
from flask import request
from flask import Response
import pandas as pd
import json
import numpy as np
app = Flask(__name__)
@app.route("/")
def hello():
#inputtext = request.args.get('input_text')
input_text = stringinput()
theanswer = function.checkArray(input_text)
x = {
"error": 'false',
"string": "",
"answer": theanswer
}
reply = json.dumps(x)
r = Response (response=reply, status=200)
r.headers["Content-Type"]="application/json"
r.headers["Access-Control-Allow-Origin"]="*"
return r
@app.route("/", methods=['GET'])
def stringinput():
inputtext = request.args.get('input_text')
return inputtext
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
注记
我相信所有三个页面之间的通信都正常-状态代码200
1条答案
按热度按时间bn31dyow1#
我怀疑这是问题所在,但是当您将URL放在curl_init中时,您不需要在
setopt
中使用CURLOPT_URL
。您没有显示URL的外观。这可能是一个问题。
您可能必须使用
urlencode()
或rawurlencode()
,我更喜欢使用POST请求来避免urlencode。您需要查看传出请求标头。
为此,您需要此setopt:
构建请求头通常是一个好主意,包括主机。
您还应该使用此setopt:
如果请求是HTTPS,则需要前两个setopt。我已经使用此代码十多年了。
我上周末刚用它刮了Zillow来获得上市。
我相信这将帮助您找到问题所在。
我假设URL在浏览器中工作。
你可以从你的浏览器中得到原始请求标题。有时urlencoding会很棘手。