我正在尝试使用连接服务器HttpURLConnection
,但是PUT方法存在问题。
我需要发送一个包含 1500个字符 (或更多)的字符串,但是在这种情况下,服务器会产生超时并返回 500个服务器内部错误 。
如果我发送的字符串少于 1400个字符 ,则没有问题,服务器返回 OK 。
我的代码如下:
public String connectToServer(String prototype) {
String responseString = "";
try {
BufferedReader in = new BufferedReader(new InputStreamReader(openURLForInput(new URL(URL), USERNAME, PASSWORD, prototype)));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
responseString += line;
}
} catch (IOException e) {
e.printStackTrace();
responseString = e.toString();
}
return responseString;
}
// -----------------------
public InputStream openURLForInput(URL url, String uname, String pword, String content) throws IOException {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Authorization", userNamePasswordBase64(uname, pword)); // I know this is OK
conn.addRequestProperty("Content-type", "application/html" target="_blank">xml; charset=utf-8");
//conn.setChunkedStreamingMode(8 * 1024);
conn.setRequestMethod("PUT");
conn.connect();
OutputStream output = conn.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(output, "UTF-8");
BufferedWriter writer = new BufferedWriter(osw);
writer.write(content); // content length > 1400 characters
writer.close();
output.close();
int status = conn.getResponseCode();
Log.i("STATUS", status + "");
Log.i("STATUS_ERROR", conn.getResponseMessage());
return conn.getInputStream();
}
我尝试添加线
conn.setFixedLengthStreamingMode(contentLength)
conn.setChunkedStreamingMode(8 * 1024);
但是服务器的答案还是错误的。
更新:
我可以发现问题。出于某种原因,当我尝试在请求中发送大型邮件时,服务器会产生超时, 但不会对所有网络
产生超时,而只会对某些网络产生超时。我使用了安全连接SSL,这可能会带来问题吗?
也许这是网络MTU问题,我想请您对此进行调查。
这是与Windows相关的表格:
Network MTU (bytes)
-------------------------------
16 Mbps Token Ring 17914
4 Mbps Token Ring 4464
FDDI 4352
Ethernet 1500
IEEE 802.3/802.2 1492
PPPoE (WAN Miniport) 1480
X.25 576
问题内容: 当我尝试过时如何设置可以使用swift输入到UITextField中的最大字符数?,我看到如果我全部使用10个字符,我也无法删除该字符。 我唯一能做的就是取消该操作(一起删除所有字符)。 有谁知道如何不遮挡键盘(以便我不能添加其他字母/符号/数字,但可以使用退格键)? 问题答案: 对于Swift 5和iOS 12,请尝试以下协议实现方法的实现: 该代码最重要的部分是从()到()的转换。
配置最大长度为数据存储提供了有关示意,示意其为给定属性使用合适的数据类型。最大长度仅被应用于数组数据类型,比如 string 和 byte[]。 注意 Entity Framework 在将数据传递给数据库提供程序之前不会做最大长度验证。是否合适是由数据库提供程序或数据储存验证的。比如,使用的是 SQL Server 时,超出最大长度将由于底层数据列的数据类型不允许数据超出而导致异常。 惯例 按照
我有一个Api,它要求我在发送实际文件之前发送文件的字节大小。当我在第一个Api调用中对要发送的文件调用时,它将返回。 null 结果证明的是正确的。因此,在调用时,必须修改或增加。
问题内容: 我试图从表中获取所有列的列表,这些列表包含它们的数据类型,数据长度和该列中最长值的长度。 我使用此SQL来获取列及其数据类型和长度: 我有此SQL,用于获取值的最大长度: 但是我不知道如何将它们结合起来。我正在使用SQL Server 2008。 问题答案: 感谢您的建议。我想出了以下解决方案。它为我获取了我需要的数据,但是希望了解它是否可以提高效率。
问题内容: 在这篇文章之后:关于比赛的帖子 我的问题是我有很多行成一行。例如,如果我有10行,字符串约50个字符,我的查询将只显示6-7行或类似的内容。我在堆栈和Google中进行搜索,发现可以通过以下命令更改CONCAT最大长度:。我做错了什么? 编辑: 当我向我显示1024。MySQL版本5.0.96-log。表类型:MyISAM。看起来它没有任何限制,我尝试选择具有2000个字符的简单var
问题内容: 可以为设置最大长度吗?我当时正在考虑使用事件来处理它,但仅在用户开始/完成编辑时才调用它,而在用户键入时不调用它。我也阅读了文档,但还没有找到任何东西。有什么解决方法吗? 问题答案: Paulw11的答案稍短一些: 您只需要一个TextField字符串的包装即可。可以将其视为一个解释器,该解释器每次发生更改时都会得到通知,并且能够将修改发送回TextField。但是,无需使用修饰符创建