我希望通过Mobile Safari获得iPhone UDID。我在用 .mobileconifg as
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<dict>
<key>URL</key>
<string>http://192.168.12.45:8080/enroll/retrieve</string>
<key>DeviceAttributes</key>
<array>
<string>UDID</string>
<string>SERIAL</string>
<string>CHALLENGE</string>
<string>IMEI</string>
<string>ICCID</string>
<string>VERSION</string>
<string>PRODUCT</string>
<string>DEVICE_NAME</string>
<string>MAC_ADDRESS_EN0</string>
</array>
</dict>
<key>PayloadOrganization</key>
<string>Org</string>
<key>PayloadDisplayName</key>
<string>Profile Service</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadUUID</key>
<string>D6F1B2A3-0039-48B5-915B-8E2B35663816</string>
<key>PayloadIdentifier</key>
<string>Identifer</string>
<key>PayloadDescription</key>
<string>This temporary profile will be used to find and display your current device's UDID.</string>
<key>PayloadType</key>
<string>Profile Service</string>
</dict>
</plist>
retrieve.php
<?php
$data = file_get_contents('php://input');
header('Location: http://192.168.12.45/enroll/info?'.$data, true, 301);
?>
info是一个目录,而不是一个页面,我在这个目录中创建了index.php,我在$ _GET中获取了数据。
但我能从php获得。
但是我想使用java servlet,我在servlet url上的mobileconfig文件中更改了url但是我无法在java中获取任何值。
检索Java代码
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String paramName = (String) headerNames.nextElement();
String paramValue = request.getHeader(paramName);
System.out.println("paramValue :" + paramValue);
}
输出
paramValue :192.168.12.45:8080
paramValue :keep-alive
paramValue :gzip, deflate
paramValue :Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53
paramValue :en-us
paramValue :text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
它显示像这样的错误
但我想要java servlet来获取IMEI。 我想将上面的PHP代码更改为java servlet。 如何解决这个问题并安装Profile以获取UDID和IMEI
答案 0 :(得分:3)
这可能是由于您的数据库文件或包含它的目录启用了加密。 使用:
带有NSFileManager's setAttributes:ofItemAtPath:error:
的 NSFileProtectionNone
答案 1 :(得分:0)
所以你似乎想要使用Java servlet而不是PHP。
根据{{3}},
这可能不起作用,
因为.mobileconfig
文件中指定的接收URL似乎必须是 PHP文件:
QUIRK警告:无论出于何种原因,该过程非常特别关注服务器在将用户发送到您的预设URL时的响应方式。经过多次尝试,我相信您的接收URL必须是.php文件。这听起来很疯狂,但我很认真。
但你还是可以试试。
根据{{3}},
这个Java代码应该大致相当于PHP的php://input
,
这在你的servlet中:
InputStream stream = request.getInputStream();
byte[] buffer = new byte[512];
StringBuilder builder = new StringBuilder();
while (stream.read(buffer) != -1) {
builder.append(new String(buffer));
}
System.out.println(builder);
如果仍然无效,
我想你别无选择,只能做文章作者所做的事,
并使用PHP只是重定向到servlet。
在这种情况下,如果在retrieve.php
中,会更好
您需要将$data
作为命名查询参数传递,
将'/info?'.$data
更改为'/info?data='.$data
,如下所示:
<?php
$data = file_get_contents('php://input');
header('Location: http://192.168.12.45/enroll/info?data='.rawurlencode($data));
?>
我还在$data
中包裹了rawurlencode($data)
,并删除了似乎没有必要的额外参数。
然后在您的servlet中,您可以像这样访问data
参数:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = request.getParameter("data");
System.out.println(data);
}