HttpURLConnection只有localhost中的原始数据

The java code insert raw data into test.php, but it only works with localhost url, and don't with public ip

My urls,

//this URL work perfect, output: {"a":"b"} phpOK
postJSON("http://192.168.1.100/test.php?username=user&password=pass");

//this URL don't work, output: phpOK
postJSON("http://myddns.net/test.php?username=user&password=pass");

Code to send data,

public String postJSON(String URL, String jsonStr) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    HttpURLConnection urlConnection = null;
    StringBuffer response = null;
    try {
        URL url = new URL(URL);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestProperty("Content-Type", "application/json");
        urlConnection.setRequestMethod("POST");
        urlConnection.setFixedLengthStreamingMode(jsonStr.getBytes().length);

        urlConnection.setConnectTimeout(5000);
        urlConnection.setReadTimeout(5000);
        urlConnection.setUseCaches(false);
        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);
        urlConnection.connect();

JSONObject jsonStr= new JSONObject();
jsonStr.put("a", "b");

        DataOutputStream printout = new DataOutputStream(urlConnection.getOutputStream());
        printout.writeBytes(jsonStr);
        printout.flush();
        printout.close();

        //if(urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
        InputStream is = urlConnection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));

        String inputLine;
        response = new StringBuffer();

        while ((inputLine = br.readLine()) != null) {
            response.append(inputLine);
        }
        br.close();
    } finally {
        if(urlConnection != null)
            urlConnection.disconnect();
        if(response != null)
            return response.toString();
        else
            return "";
    }
}

My PHP,

//in test.php
<?php
 $phpInput = file_get_contents('php://input');
 echo $phpInput." phpOK";
if(isset($_GET['username']) & isset($_GET['password']))
 echo "extra vars catched"
?>

I test in a real phone using 3G data and... My server is blocking in some way the public ip, because when I use the local ip it's work perfect. Blocking the writing output stream: urlConnection.getOutputStream()

doucheng1944
doucheng1944 我还使用3G测试手机中的App(客户端),并且不使用输出数据
3 年多之前 回复
dsaaqdz6223
dsaaqdz6223 我的ddns直接指向my_global_ip:1994/test.php?username=user&password=pass在我的路由器配置中,端口1994被设置为转发到托管服务器的计算机。也许1994年的端口不是写json数据的最佳选择。
3 年多之前 回复
douyulv6921
douyulv6921 Apache,PHP或MySQL中没有错误日志。
3 年多之前 回复
doubingguan3425
doubingguan3425 '“而且你没有谈论exeptions。请查看logcat”@greenapps正如我所说,没有例外,因为我不知道如何在这一行中捕获异常,如-exception如果writeoutputstrem不能在此行中写入数据“DataOutputStreamprintout=newDataOutputStream(urlConnection.getOutputStream());”
3 年多之前 回复
dream890110
dream890110 “中间是否有代理?某些代理将POST请求转换为GET请求。奇怪的是,你的Apache日志只讨论GET。”@greenapps我正在使用no-ip.com的免费ddns
3 年多之前 回复
doumei2023
doumei2023 “你的服务器无法阻止它。但你传递了第一个问题:客户端是否连接开始?”@greenapps是的,但编写JSON的函数没有(在公共IP中,在本地ip中没问题)。也许防火墙爆发了?
3 年多之前 回复
doulai1910
doulai1910 “并解释你在哪里做POST请求Apache谈论GET”@greenapps也许吧,因为我在URL中使用了vars:“test.php?username=user&password=pass”看到编辑过的问题
3 年多之前 回复
dongmeng1875
dongmeng1875 “如果没有连接,你就不会收到”phpOk“..”@greenapps更正:我的服务器以某种方式阻止公共IP在php文件中写入数据。就像我需要允许公共IP写入数据的php权限。
3 年多之前 回复
douzhantanju1849
douzhantanju1849 我的服务器以某种方式阻止公共IP。您不仅应该将xamp服务器绑定到本地主机,还要绑定到所有ips。但是你会有一个连接异常。你没有谈论过exeptions。请查看logcat。
3 年多之前 回复
dongyue9860
dongyue9860 介于两者之间吗?一些代理将POST请求转换为GET请求。奇怪的是,你的Apache日志只谈论GET。
3 年多之前 回复
duanjue2560
duanjue2560 阻止写入输出流:urlConnection.getOutputStream()。您的服务器无法阻止它。但是你传递了第一个问题:客户端是否连接开始?
3 年多之前 回复
dongye4192
dongye4192 并解释你在哪里做POST请求Apache谈论GET。
3 年多之前 回复
dongpi9480
dongpi9480 我的服务器在某种程度上阻止了公共IP,因为当我使用本地ip时,它的工作非常完美。。如果没有连接,你将不会收到“phpOk”..returnresponse.toString();是那个“phpOK”?
3 年多之前 回复
doudao6529
doudao6529 我使用urlConnection.setRequestMethod(“POST”);这项工作在本地ip。
3 年多之前 回复
duanlijia5864
duanlijia5864 我更新了问题@greenapps
3 年多之前 回复
doutangqi4444
doutangqi4444 我在使用3G数据的真实手机中进行测试......同样的事情......我的服务器在某种程度上阻止了公共IP。阻止写入输出流:urlConnection.getOutputStream()
3 年多之前 回复
duanliushua5026
duanliushua5026 代码发送数据,。发布完整代码。也是读取响应的代码(来自php的回声)。
3 年多之前 回复
douyanqu9722
douyanqu9722 发送数据的代码,发布完整的发送代码已经很久了。
3 年多之前 回复
dsgdg46465
dsgdg46465 “GETtest.phpHTTP/1.1”???一个GET请求???
3 年多之前 回复
douhuai2861
douhuai2861 你认为我们可以在评论中阅读所有这些内容吗?
3 年多之前 回复
dpikoto468637
dpikoto468637 Apache访问日志与网址“myddns.net/test.php”:180.64.234.249--[15/Nov/2016:05:57:27-0500]“GETtest.phpHTTP/1.1”200php://输入:phpOK与url“192.168.1.100/test.php”:192.168.1.100--[15/Nov/2016:06:02:40-0500]“GETtest.phpHTTP/1.1”200php://输入:{“a”:“b”}phpOK我需要这个“{”a“:”b“}phpOK”并且不要这个“phpOK”
3 年多之前 回复
duanqujing3863
duanqujing3863 “只有你的计算机才能连接到路由器。不是模拟器。”@greenapps我想说,我在运行我服务器的计算机上运行模拟器。歉意
3 年多之前 回复
duanmiexi2275
duanmiexi2275 “现在告诉你想要什么,问题是什么。你的客户会尝试连接哪个服务器?”@greenapps问题是,当我在我的java代码中使用本地ip时,可以在php中发布数据,我可以使用函数file_get_contents('php://input')在php文件中获取数据,但是我使用我的外部IP,然后不能写数据。这是我的服务器回复:“phpOK”但不要“{”a“,”b“}phpOK”。{“a”,“b”}表示在php文件中写入的原始数据。我认为我的wampserver拒绝为公共IP写入数据。
3 年多之前 回复
dongxkbjiaofea1163
dongxkbjiaofea1163 “然后你有另一个服务器的外部网址”@greenapps外部网址指向我的电脑,egg:myip.ddns.net->200.200.200.200:1994->我的路由器转发到我的本地IP192.168.1.100:80(外部1994到内部80),因为我将端口1994转发到我的本地ip保留,并且我的服务器请求信息。
3 年多之前 回复
duanlan8763
duanlan8763 请引用它看起来像报价的方式。现在这令人困惑。
3 年多之前 回复
duanbin3021
duanbin3021 所以你试图连接到同一个wamp服务器。一旦使用计算机的内部IP和一次使用路由器的外部IP。!如果你只在初学者那里说过并且只有模拟器?没有真正的Android设备?
3 年多之前 回复
dq05304
dq05304 我说客户端和服务器正在运行,同一台计算机连接在同一台路由器上。不可能。只有您的计算机才能连接到路由器。不是模拟器。你甚至不需要为你的模拟器和xwamp设置路由器。
3 年多之前 回复
doulun7739
doulun7739 整个故事仍然没有意义,因为你的故事中有两台服务器。这是不常见的。您有一台Android客户端在计算机上的模拟器中运行。然后在同一台计算机上有一个xamp服务器。然后你有另一台服务器的外部网址。好的那是你的设置。现在告诉你想要什么以及问题是什么。您的客户端会尝试连接哪个服务器?
3 年多之前 回复
doufang3001
doufang3001 我不是说,我说客户端和服务器正在运行和同一台计算机并连接在同一个路由器,因为客户端(android模拟器)和服务器(wampserver)在同一台计算机内。我不能使用外部URL在php://输入中写入数据。我在数据4G提供商的真实手机中测试外部网址并回答她。
3 年多之前 回复
dongweizhen2009
dongweizhen2009 您仍然没有使用代码,响应和异常,堆栈跟踪来编辑您的帖子。所以你仍然以错误的方式寻求帮助。
3 年多之前 回复
doskmc7870
doskmc7870 客户端和服务器连接在同一个路由器???您说服务器在互联网上。你的笔记没有意义。
3 年多之前 回复
douci1677
douci1677 我在Android中使用HTTPConnection将数据发布到php服务器。问题是只能使用本地URL192.168.1.100,而不使用我的全局ip,如global_ip:1994/test.php注意:客户端和服务器连接在同一个路由器中
3 年多之前 回复
dongwei3120
dongwei3120 您不清楚以错误的方式寻求帮助。
3 年多之前 回复
dongxibeng5324
dongxibeng5324 因为,原始数据没有显示任何内容。输出是:echofile_get_contents('php://input')+“phpOK”;
3 年多之前 回复
duanhu2414
duanhu2414 //这个URL不起作用,输出:phpOK。?如果输出是phpOK,那么我会说它有效。
3 年多之前 回复

1个回答

I found the problem:

The problem is my record type of DDNS.

I config my ddns with record type URL, protocol HTTP:// and IP X.X.X.X:1994

I change to record type DNS Host (A), IPv4 Address: myip only X.X.X.X , without port.

In my URL client, I set the port in the URL.

I change the record type of my DDNS and, http://myddns.net/test.php?username=user&password=pass to this: http://myddns.net:1994/test.php?username=user&password=pass

douxi3554
douxi3554 感谢您帮助@greenapps
3 年多之前 回复
douyan8266
douyan8266 你找到了好!
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问