HttpURLConnection空响应Android和Python
如果我忘记了一些规则,请原谅我:p 我正在开发一款android应用程序,它需要将基本的来回数据传输到谷歌应用程序引擎上的应用程序。该应用程序是用python编写的,我正在使用flask框架与该应用程序进行通信(通过http请求、不安全以及我知道的其他一切,但我现在最想要的是概念证明) 我的问题是,当python应用程序部署在gae上,并且我从物理设备上的android应用程序发送请求时,我没有得到响应,但是如果我将必要的URL放在浏览器中,我会得到响应,没有问题 无论如何,java函数代码:HttpURLConnection空响应Android和Python,android,google-app-engine,flask,httpurlconnection,Android,Google App Engine,Flask,Httpurlconnection,如果我忘记了一些规则,请原谅我:p 我正在开发一款android应用程序,它需要将基本的来回数据传输到谷歌应用程序引擎上的应用程序。该应用程序是用python编写的,我正在使用flask框架与该应用程序进行通信(通过http请求、不安全以及我知道的其他一切,但我现在最想要的是概念证明) 我的问题是,当python应用程序部署在gae上,并且我从物理设备上的android应用程序发送请求时,我没有得到响应,但是如果我将必要的URL放在浏览器中,我会得到响应,没有问题 无论如何,java函数代码:
private boolean doLogin(String username, String passwd){
boolean loggedIn = false;
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
URL url = new URL("http://appname.appspot.com/login/admin/admin");// + username + "/" + passwd+"/");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//con.setRequestMethod("POST");
InputStream in = new BufferedInputStream(con.getInputStream());
if (readStream(in) == true){
loggedIn = true;
}
//con.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return loggedIn;
}
以及python函数:
@webapp.route('/login/<username>/<passwd>', methods=["GET", "POST"])
def dologin(username, passwd):
def validusertype(u2check, p2check):
if db.GqlQuery("SELECT * FROM UserAccount WHERE username = :u2check AND password = :passwd", u2check = u2check, passwd=p2check).count() > 0:
qry = db.GqlQuery("SELECT * FROM UserAccount WHERE username = :u2check", u2check = u2check)
for r in qry.fetch(limit=None):
return r.usertype
return None
if request.method == "GET":
_type = validusertype(username, passwd)
if _type:
return "True"
# elif request.method == "POST":
# Fall though - if nothing above takes, we end up here.
return "False"
还要将这几行放在onCreate()中:
很抱歉这么说,但是您的Java代码是完全错误的。请查看使用HttpURLConnection的一些示例,然后重试。或者使用包装器库,因为我承认
HttpURLConnection
使用起来非常麻烦,而且API不好。然后向我们显示堆栈跟踪或错误消息。就是这样,它没有显示任何错误,python代码是否正常?这可能是复制/粘贴问题,但python代码会导致语法错误。您有def dologin(…
),但没有函数体;它后面紧跟着另一个相同缩进级别的函数定义。看起来dologin行之后的所有内容都应该缩进?@dano Yep很抱歉,这是一个复制/粘贴错误。python代码在浏览器中根据需要工作(即浏览器显示“True”)当细节是正确的)不知何故,由于一个完全盲目的奇迹,我让它工作了,在java的其余部分有一些愚蠢的错误导致了一个不相关的问题,但我对它们进行了分类。我将把我所做的添加到原始帖子中。
try {
URL url = new URL("http://app.appspot.com/login/admin/admin");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
is = conn.getInputStream();
// Convert the InputStream into a string
String contentAsString = readStream(is);
return contentAsString;
// Makes sure that the InputStream is closed after the app is
// finished using it.
} finally {
if (is != null) {
is.close();
}
}
StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);