无法连接到 azure rest web 服务
can't connect to azure rest web service
我正在尝试开发一个客户端程序,通过 azure 创建一个设备标识。我使用 azure rest 创建它,所以我使用 jersey 实现从客户端程序调用此 web 服务,但我收到错误 com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Socket is not connected: connect
我使用邮递员对其进行了测试,它可以工作并且 python 它可以工作。
这是我的 java 代码:
public class Test {
public static void main(String[] args) {
try {
Client client = Client.create();
WebResource webResource = client
.resource("https://xxxx-iot-hub.azure-devices.net/devices");
ClientResponse response = webResource.path("/iotdevice1").queryParam("top", "100").queryParam("api-version", "2016-02-03").header("Content-Type", "application/json")
.header("Authorization", "SharedAccessSignature sr=xxxxx-iot-hub.azure-devices.net&sig=Yxxxxxxxxxx=1497357420&skn=iothubowner")
.put(ClientResponse.class);
String output = response.getEntity(String.class);
System.out.println("Output from Server .... \n");
System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
}
}
}
谢谢
根据您的代码,您似乎想使用 REST API 和 HTTP PUT 方法创建新的设备标识。
但是,在您的代码中,查询参数 top=100
不是必需的,并且缺少请求 body {deviceId: "iotdevice1"}
。
这是我的工作代码。
String body = "{deviceId: \"iotdevices1\"}";
ClientResponse response = webResource.path("/iotdevices1").queryParam("api-version", "2016-02-03")
.header("Content-Type", "application/json")
.header("Authorization",
"SharedAccessSignature sr=xxxx.azure-devices.net&sig=xxxxxxxx&se=1497357420&skn=iothubowner")
.put(ClientResponse.class, body);
希望对您有所帮助。如有任何疑问,请随时告诉我。
更新:
要删除现有设备标识,请参阅 REST API 参考资料和下面的代码。
ClientResponse response = webResource.path("/iotdevices1").queryParam("api-version", "2016-02-03")
.header("Content-Type", "application/json")
.header("If-Match", "*")
.header("Authorization",
"SharedAccessSignature sr=xxxx.azure-devices.net&sig=xxxxxx&se=1497490976&skn=iothubowner")
.delete(ClientResponse.class);
请注意上面的headerIf-Match
我正在尝试开发一个客户端程序,通过 azure 创建一个设备标识。我使用 azure rest 创建它,所以我使用 jersey 实现从客户端程序调用此 web 服务,但我收到错误 com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Socket is not connected: connect 我使用邮递员对其进行了测试,它可以工作并且 python 它可以工作。 这是我的 java 代码:
public class Test {
public static void main(String[] args) {
try {
Client client = Client.create();
WebResource webResource = client
.resource("https://xxxx-iot-hub.azure-devices.net/devices");
ClientResponse response = webResource.path("/iotdevice1").queryParam("top", "100").queryParam("api-version", "2016-02-03").header("Content-Type", "application/json")
.header("Authorization", "SharedAccessSignature sr=xxxxx-iot-hub.azure-devices.net&sig=Yxxxxxxxxxx=1497357420&skn=iothubowner")
.put(ClientResponse.class);
String output = response.getEntity(String.class);
System.out.println("Output from Server .... \n");
System.out.println(output);
} catch (Exception e) {
e.printStackTrace();
}
}
}
谢谢
根据您的代码,您似乎想使用 REST API 和 HTTP PUT 方法创建新的设备标识。
但是,在您的代码中,查询参数 top=100
不是必需的,并且缺少请求 body {deviceId: "iotdevice1"}
。
这是我的工作代码。
String body = "{deviceId: \"iotdevices1\"}";
ClientResponse response = webResource.path("/iotdevices1").queryParam("api-version", "2016-02-03")
.header("Content-Type", "application/json")
.header("Authorization",
"SharedAccessSignature sr=xxxx.azure-devices.net&sig=xxxxxxxx&se=1497357420&skn=iothubowner")
.put(ClientResponse.class, body);
希望对您有所帮助。如有任何疑问,请随时告诉我。
更新:
要删除现有设备标识,请参阅 REST API 参考资料和下面的代码。
ClientResponse response = webResource.path("/iotdevices1").queryParam("api-version", "2016-02-03")
.header("Content-Type", "application/json")
.header("If-Match", "*")
.header("Authorization",
"SharedAccessSignature sr=xxxx.azure-devices.net&sig=xxxxxx&se=1497490976&skn=iothubowner")
.delete(ClientResponse.class);
请注意上面的headerIf-Match