我的GoDaddy帐户上有一个简单的数据库,我正在尝试从中检索数据。我在我的帐户上设置了一个简单的php文件,可以直接从浏览器中调用它,它可以很好地显示检索到的数据。你可以在这里看到/运行它:
http://thunderbirdtechnology.com/SnapVest/php/SnapVestDatabaseRetrieveAvailableOptions.php
您将看到以下内容:
[
{
"ID": "1",
"CompanyName": "Yahoo Inc.",
"DateInvestStart": "2014-02-19 14:35:56",
"DateInvestEnd": "2014-02-28 11:35:44",
"DatePurchase": "2014-03-11 11:35:51"
}
]
一切都很好。
但是我正试图通过在我的ANDROID手机上运行的JAVA程序来做到这一点。它不起作用。这是代码部分:
InputStream inputStream = null;
String result = "";
try
{
HttpClient httpclient = new DefaultHttpClient();
// Here is where we specify where our php file (see sample above) is that will do the actual
// gathering up of the data.
HttpPost httppost = new HttpPost("http://www.ThunderbirdTechnology.com/SnapVes/php/SnapVestDatabaseRetrieveAvailableOptions.php");
HttpResponse httpresponse = httpclient.execute(httppost);
HttpEntity httpentity = httpresponse.getEntity();
inputStream = httpentity.getContent();
}
catch(Exception e)
{
// Report "Error in http connect to database"
Toast.makeText(getBaseContext(),
"Error in http connect to database", Toast.LENGTH_LONG).show();
}
try
{
// Convert response to string
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1"),8);
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null)
{
stringBuilder.append(line + "\n");
}
inputStream.close();
result = stringBuilder.toString();
}
catch(Exception e)
{
// Report "Error converting result"
Toast.makeText(getBaseContext(),
"Error converting result", Toast.LENGTH_LONG).show();
}
它确实检索了一些数据。但这是WEIRD PART!它不是从我的数据库表中检索我的数据。相反,它正在从I-not-know-where中检索一些ODD文件!
这是一个可以回收的样本:
<!--
Copyright 2003, CyberTAN Inc. All Rights Reserved
This is SOURCE CODE of CyberTAN Inc.
the contents of this file may not be disclosed to third parties,
copied or duplicated in any form without the prior written
permission of CyberTAN Inc.
This software should be used as a reference only, and it not
intended for production use!
THIS SOFTWARE IS OFFERED "AS IS", AND CYBERTAN GRANTS NO WARRANTIES OF ANY
KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. CYBERTAN
SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE
-->
<HTML><HEAD><TITLE></TITLE>
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
到底是什么意思?我不知道CyberTan是谁/什么。为什么我没有从我的数据库中获取数据?好像是连接好了。它似乎正在执行php文件,但它实际返回的是来自我从未见过的某个文件。
我完全糊涂了。 :)
答案 0 :(得分:1)
确定您在移动设备上没有遇到防火墙或数据包检查问题? CyberTan似乎制作了wifi /路由器产品。我会检查你的家用路由器的无线,看看是否有一些保护措施阻止你。与某些电子邮件服务器读取附件和查找代码的方式类似。
此外,如果您在访问日志中看到网络服务器被点击,那么您对回复的响应感兴趣。一些好的旧tcpdump / wireshark会从而不是通过HTTPS获取该信息
答案 1 :(得分:1)
快速Google搜索告诉我CyberTAN Inc.是网络/无线设备的制造商。所以你看到的可能是你的WLAN路由器的响应。
您所看到的也可能是对404错误的某种奇怪(缓存)响应。您的Java POST请求中的硬编码URL中存在一个小错字:
http://www.ThunderbirdTechnology.com/SnapVes/php/SnapVestDatabaseRetrieveAvailableOptions.php
^ -- t missing
您一定要阅读响应状态代码并检查是否应该以某种方式处理错误。您可能已经看到,它是404.此外,您应该更具体地执行POST请求的catch-all-exceptions块。只捕获这些方法显式抛出的内容并记录实际异常。