手机APP怎么app调用支付宝接口接口

Android即时聊天系统-随聊App之接口实现
接口定义请参考上篇,实现接口采用的是成熟的第三方asmack包,asmack是smack的android版,而smack是一个已经相对成熟的封装xmpp协议的第三方jar包。服务器端安装openfire服务器,通过调用asmack的相关接口可以进行用户间通信。
在写代码之前先简单介绍几个常用类
1:ConnectionConfiguration 这是一个xmpp连接的配置类 可以通过 ConnectionConfiguration imConfig = new ConnectionConfiguration(IMConfig.IMSERVER, IMConfig.IMPORT); 配置服务器的ip和接口。
2: XMPPConnection xmpp连接管理类,通过ConnectionConfiguration 配置好相关设置后,通过imConnection = new XMPPConnection(imConfig);创建一个新的连接。
3: Roster roster相当于联系人列表,里面存储了联系人相关信息。
4:Preference 状态:分为:在线,离线,等。(4种状态)。
具体接口实现代码如下:
public class IMChat implements IMChatImpl {
protected static final String TAG = IMC
private Context iC
private static IMChat chatInstance =
private ConnectionConfiguration imC
private XMPPConnection imC
private FileTransferManager fileTransferM
private ArrayList friendL
private RecentDao recentD
private MessageDao messageD
* 保持自动重连
Class.forName(org.jivesoftware.smack.ReconnectionManager);
} catch (ClassNotFoundException ex) {
// problem loading reconnection manager
private IMChat(Context context) {
iContext = context.getApplicationContext();
initIMConnection();
private void initIMConnection() {
recentDao = new RecentDao(iContext);
messageDao = new MessageDao(iContext);
imConfig = new ConnectionConfiguration(IMConfig.IMSERVER,
IMConfig.IMPORT);
imConfig.setCompressionEnabled(false);
imConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
imConfig.setReconnectionAllowed(true);
imConfig.setSendPresence(true);
imConfig.setDebuggerEnabled(false);
chatConfig();
imConnection = new XMPPConnection(imConfig);
private void chatConfig() {
ProviderManager pm = ProviderManager.getInstance();
// Service Discovery # Items
pm.addIQProvider(query, http://jabber.org/protocol/disco#items,
new DiscoverItemsProvider());
// Service Discovery # Info
pm.addIQProvider(query, http://jabber.org/protocol/disco#info,
new DiscoverInfoProvider());
// Offline Message Requests
pm.addIQProvider(offline, http://jabber.org/protocol/offline,
new OfflineMessageRequest.Provider());
// Offline Message Indicator
pm.addExtensionProvider(offline,
http://jabber.org/protocol/offline,
new OfflineMessageInfo.Provider());
pm.addIQProvider(vCard, ard-temp, new VCardProvider());
pm.addExtensionProvider(addresses,
http://jabber.org/protocol/address,
new MultipleAddressesProvider());
// FileTransfer
pm.addIQProvider(si, http://jabber.org/protocol/si,
new StreamInitiationProvider());
pm.addIQProvider(query, http://jabber.org/protocol/bytestreams,
new BytestreamsProvider());
// Privacy
pm.addIQProvider(query, jabber:iq:privacy, new PrivacyProvider());
public static IMChat getInstace(Context context) {
if (chatInstance == null)
chatInstance = new IMChat(context);
return chatI
* 通过Roster获取联系人列表
* @return 联系人的ArrayList
public ArrayList getFriends() {
friendList = new ArrayList();
FriendRoster friendR
Collection rosterEntries = roster.getEntries();
for (RosterEntry friendEntry : rosterEntries) {
String friendJid = friendEntry.getUser();
String friendAlias = friendEntry.getName();
friendRoster = new FriendRoster(friendJid, friendAlias);
friendList.add(friendRoster);
return friendL
public boolean login(String account, String password) {
if (imConnection.isConnected())
imConnection.disconnect();
imConnection.connect();
imConnection.login(account, password);
} catch (XMPPException e) {
e.printStackTrace();
if (imConnection.isAuthenticated()) {
roster = imConnection.getRoster();
roster.setSubscriptionMode(Roster.SubscriptionMode.accept_all);
initMessageListener();
initFileListener();
* 注册消息的监听器
private void initMessageListener() {
imConnection.getChatManager().addChatListener(
new ChatManagerListener() {
public void chatCreated(Chat chat, boolean createdLocally) {
chat.addMessageListener(messageListener);
* 创建文本消息的监听器(new)
private MessageListener messageListener = new MessageListener() {
public void processMessage(Chat chat, Message message) {
if (message.getType() == Message.Type.chat) {
String fromId = message.getFrom();
System.out.println(fromId);
fromId = fromId.split(@)[0];
String friendAlias = getFriendName(fromId);
String msgContent = message.getBody();
String msgTime = DateTime.getSimpleTime();
addRecentMessageDao(fromId, friendAlias, msgTime, msgContent,
ChatMessage.MSG_TYPE_TXT_IN);
* 内添加最近聊天文字信息
* @param chatAccount
* @param chatUser
* @param msgTime
* @param msgContent
private void addRecentMessageDao(String chatAccount, String chatUser,
String msgTime, String msgContent, int msgType) {
ChatMessage chatMessage = new ChatMessage();
chatMessage.setMsgAccount(chatAccount);
chatMessage.setMsgUser(chatUser);
chatMessage.setMsgTime(msgTime);
chatMessage.setMsgContent(msgContent);
chatMessage.setMsgType(msgType);
messageDao.insert(chatMessage);
if (msgType == ChatMessage.MSG_TYPE_IMG_IN) {
msgContent = [图片];
} else if (msgType == ChatMessage.MSG_TYPE_VOICE_IN) {
msgContent = [语音];
RecentChat recentChat = new RecentChat(chatAccount, null, chatUser,
msgTime, msgContent);
recentDao.insert(recentChat);
Intent intent = new Intent(IMConfig.MSG_ACTION);
intent.putExtra(IMConfig.CHAT_ACCOUNT, chatAccount);
intent.putExtra(IMConfig.CHAT_USERNAME, chatUser);
intent.putExtra(IMConfig.CHAT_CONTENT,msgContent);
iContext.sendBroadcast(intent);
* 注册接收文件的监听器
private void initFileListener() {
fileTransferManager = new FileTransferManager(imConnection);
fileTransferManager.addFileTransferListener(new FileTransferListener() {
public void fileTransferRequest(FileTransferRequest request) {
String fromId = request.getRequestor();
if (fromId != null && !.equals(fromId)) {
String descript = request.getDescription();
IncomingFileTransfer inTransfer = request.accept();
String subName = .
int msgType = IMConfig.MSG_TYPE_IMAGE;
if (descript.equals(voice)) {
subName = .
msgType = IMConfig.MSG_TYPE_VOICE;
String fileName = System.currentTimeMillis() + subN
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
path = iContext.getExternalFilesDir(fromId.split(@)[0]);
path = iContext.getFilesDir();
String absolutePath = path.getAbsolutePath() + /
File file = new File(absolutePath);
inTransfer.recieveFile(file);
} catch (XMPPException e) {
e.printStackTrace();
if (msgType == IMConfig.MSG_TYPE_IMAGE) {
fromId = fromId.split(@)[0];
String friendAlias = getFriendName(fromId);
String msgContent = absoluteP
String msgTime = DateTime.getSimpleTime();
addRecentMessageDao(fromId, friendAlias, msgTime,
msgContent, ChatMessage.MSG_TYPE_IMG_IN);
Log.v(TAG, img receive success);
} else if (msgType == IMConfig.MSG_TYPE_VOICE) {
fromId = fromId.split(@)[0];
String friendAlias = getFriendName(fromId);
String msgContent = absoluteP
String msgTime = DateTime.getSimpleTime();
addRecentMessageDao(fromId, friendAlias, msgTime,
msgContent, ChatMessage.MSG_TYPE_VOICE_IN);
Log.v(TAG, amr receive success);
public String getFriendName(String userAccount) {
if (roster.getEntry(userAccount) == null) {
addFriend(userAccount, userAccount, null);
String friendName = roster.getEntry(userAccount).getName();
return friendN
public boolean addFriend(String userAccount, String alias,
String[] groupName) {
roster.createEntry(userAccount, alias, groupName);
} catch (XMPPException e) {
e.printStackTrace();
public boolean removeFriend(String userAccount) {
RosterEntry rosterEntry = roster.getEntry(userAccount);
roster.removeEntry(rosterEntry);
} catch (XMPPException e) {
e.printStackTrace();
public boolean setAlias(String userAccount, String alias) {
RosterEntry rosterEntry = roster.getEntry(userAccount);
rosterEntry.setName(alias);
public boolean sendMessage(String userAccount, String message) {
imConnection.getChatManager().createChat(userAccount, null)
.sendMessage(message);
} catch (XMPPException e) {
e.printStackTrace();
public boolean sendFile(String userAccount, String filePath, String type) {
File file = new File(filePath);
OutgoingFileTransfer outTransfer = fileTransferManager
.createOutgoingFileTransfer(userAccount);
outTransfer.sendFile(file, type);
} catch (XMPPException e) {
e.printStackTrace();
public boolean logout() {
if (imConnection.isConnected())
imConnection.disconnect();
如有疑问可在下面回复,一一作答,因本人太懒,实在懒得写文字描述了。。。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'分享即可 +1积分
第1章 APP接口简介
第2章 封装通信接口方法
第3章 核心技术
第4章 APP接口实例
Copyright (C)
All Rights Reserved | 京ICP备 号-2浅谈PHP与手机APP开发即API接口开发 - PHP - language - ITeye论坛
浅谈PHP与手机APP开发即API接口开发
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
发表时间:&&
相关知识库:
API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞生很多专门API服务的公司,如:聚合数据(/)
作为最流行的服务端语言PHP(PHP: Hypertext Preprocessor),在开发API方面,是很简单且极具优势的
这篇文章写给不太了解PHP开发API接口的开发者一、先简单回答两个问题1、PHP 可以开发客户端吗?答:正确的回答是,不适合,因为PHP是服务端脚本语言,负责 B/S或C/S 架构的S部分,即:Server端的开发。(别去纠结 GTK、WinBinder)2、为什么选择 PHP 作为开发服务端的首选?答:跨平台(可以运行在UNIX、LINUX、WINDOWS、Mac OS下)、低消耗(PHP消耗相当少的系统资源)、运行效率高(相对而言)、MySQL的完美搭档,本身是免费开源的,......二、如何使用 PHP 开发 API 呢?有兴趣细研究的,可以先看看百科介绍:百科写的比较泛,嫌文字多?好吧,那就不看了,先了解下 API 是什么鬼1、API 比开发 WEB 更简洁,但可能逻辑更复杂,API 只返回结果,也就是只完成数据输出,不呈现页面,2、WEB 开发,更多的是 GET 和 POST 请求,API 还有 PUT、DELETE 请求3、和 WEB 开发一样,首先需要一些相关的参数,这些参数,都会由客户端传过来,也许是 GET 也许是 POST,这个需要开发团队相互之间约定好,或者制定统一规范4、有了参数,根据应用需求,完成数据处理,例如:获取用户信息、发朋友圈、发消息、一局游戏结束数据提交等等5、数据逻辑处理完之后,返回客户端所需要用到的相关数据,例如:用户信息数组、朋友圈列表、消息状态、游戏结果数据等等,那数据是怎么返给客户端呢?常见有XML、JSON,设置相应的header并把要返回的数据直接打印出来即可6、客户端获取到你返回的数据后,在客户端本地和用户进行交互所以我们大概知道,API 其实不存在Web领域的 MVC 架构模式,若要分层的,API 也只有 M 和 C 两层,当然,后端可能会有更加复杂的架构!通过下面一个HTTP协议的API实例来理解PHP怎么开发API:
* 比较标准的接口输出函数
* @param string
$info 消息
* @param integer $code 接口错误码,很关键的参数
* @param array
$data 附加数据
* $param string
$location 重定向
* @return array
function var_json($info = '', $code = 10000, $data = array(), $location = '') {
$out['code'] = $code ?: 0;
$out['info'] = $info ?: ($out['code'] ? 'error' : 'success');
$out['data'] = $data ?: array();
$out['location'] = $
header('Content-Type: application/ charset=utf-8');
echo json_encode($out, JSON_HEX_TAG);
$a = empty($_GET['a']) ? '' : $_GET['a'];
$qq = empty($_GET['qq']) ? 0 : intval($_GET['qq']);
//假设这是数据源,如MySQL
$data = array();
$data[979136] = array('qq'=&979136, 'vip'=&5,'level'=&128, 'reg_time'=&, 'qb'=&300);
$data[979137] = array('qq'=&979137, 'vip'=&8,'level'=&101, 'reg_time'=&, 'qb'=&300);
preg_match('/^[a-zA-Z]+$/', $a) || var_json('非法调用');
isset($data[$qq]) || var_json('用户不存在', 100001);
switch ($a) {
//获取用户基本信息
case 'info':
//你的更多业务逻辑 ...
var_json('success', 0, $data[$qq]);
//获取动态消息
case 'message':
var_json('您正在调用动态消息接口', 0);
//获取好友列表
case 'friends':
var_json('你正在调用好友列表接口', 0);
var_json('非法调用');
把它部署到服务器之后,任何语言都可以通过HTTP协议调用诸如下面的URL接口:
接口输出示例,返回的是一串json:
"code": 0,
"info": "success",
"qq": 979137,
"level": 101,
"reg_time": ,
"location": ""
json具有很强的跨平台性,几乎每种语言都有解析json的函数,下面是一个PHP作为客户端调用的示例:
header('Content-type:text/charset=utf-8');
$url = "/api/test/user.php";
$arg = array(
=& 'info',
'qq' =& '979137',
$query_string = http_build_query($arg);
$ch = curl_init($url.'?'.$query_string);
curl_setopt($ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_USERAGENT , 'QQ_Mobile_V5.5');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , 60 );
curl_setopt($ch, CURLOPT_TIMEOUT , 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch , CURLINFO_HTTP_CODE);
curl_close($ch);
if ($response === false) {
var_dump(curl_error($ch));
} elseif ($httpcode != 200) {
var_dump($httpcode, '接口请求失败');
$ret = json_decode($response, true);
var_dump($ret);
页面输出结果:
array(4) {
["code"]=&int(0)
["info"]=&string(7) "success"
["data"]=&
array(5) {
["qq"]=&int(979137)
["vip"]=&int(8)
["level"]=&int(101)
["reg_time"]=&int()
["qb"]=&int(300)
["location"]=&string(0) ""
实际业务中,就是拿到了接口返回的数据之后,结合自身的业务为用户提供服务!
三、实际项目中,我们在开发 API 时应该注意的几个点(仅供参考)1、单文件实现多接口的形式有很多种,例如:if..elseif.. 或 switch 或 很多框架里用到的统一入口通过调用类函数的形式实现2、数据输出建议使用json,json具有很强的跨平台性,大多编程语言都支持json解析,json正在逐步取代xml,成为网络数据的通用格式3、为了保证接口安全,一定要加入鉴权体系4、对于线上的API,务必关闭所有错误显示,可以把错误写到日志里,PHP中,可以通过 error_reporting(0) 屏蔽所有错误这样做的目的,一方面是保护接口安全,防止输出不该打印的错误信息另一方面是保证输出的是正确的数据格式,如json,假如不是标准的json格式,客户端在解析时就会出错,由此影响客户端的正常运转PS:我们平时在使用手机APP时,手机会闪退,多半是这个原因,即接口调用异常5、开发 API 和 WEB 有一定的区别,如果是 WEB 的话,如果程序写的有问题,比如有个notice 或 warning 级别的错误,在 WEB 里可能不会有什么问题,也许就只是导致 WEB 的某个部分错位或乱码。但如果是 API,就会严重调用的客户端了,如果是手机APP,那闪推啥的,是必然的,如果同样也是Web调用,也可能会出现
Server Error 了6、一定要重点考虑稳定性和响应速度,因为我们在使用手机APP时,都不希望APP经常闪推、而且希望应用很流畅7、不要随便使用一些 PHP 开源框架,原因概括起来有两点:
1)如6所述,客户端一般对 API 响应速度有极高要求,目前PHP领域的开源框架非常多,根据笔者的了解,目前比较流行的框架,普遍做的比较重,而且基本都是为WEB而生,因此,框架多了很多 API 用不到的东西,框架在加载和执行冗余文件时,实际是在消耗你的性能
2)如4和5所述,框架对于WEB开发,是件很幸福的事,但对于 API 而言,你实在不敢想象它会给你出什么岔子,因为很多框架并没有全面的考虑到 API 场景
关于这点,还是有很多人纠结的,认为用框架没问题,这个怎么说呢,关键还得看架构和编码之人,有些人做的架构、写的代码,远不如框架写的稳定、跑得快的也比比皆是!
这里只是建议,关键看自己的实际情况,上线前测试全面才是硬道理!话说,牛逼的架构,一般都有自己的 API 框架!
这里给 ThinkPHP 打个广告:目前 ThinkPHP5 是 ThinkPHP 家族的一个颠覆性重构版本,Slogan:为 API 而生。本站数据接口版面提供的所有API,均采用 ThinkPHP5 框架开发,并部署在新浪云平台
再扯一下腾讯、微博、淘宝等这些个开放平台吧,
它们所谓的开放,其实就是给开发者提供一系列的API,开发者根据他们提供的技术文档,按规定的调用方法,调它们提供的接口,你就可以获取到他们的相关信息,例如:QQ用户基本信息、微博登录、淘宝店铺、商品消息等等。然后开发者再根据这些数据,在你的应用里完成交互。另外,我们常用的 Ajax 其实也是 API 调用的一种体现形式
文章来源:
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术java servlet手机app访问接口(四)推送 - L-H - 博客园
评论 - 142
一、 服务端DEMO下载及运行。
& 登录友盟后,浏览器直接输入下面这个URL,直接进入文档开发和DEMO下载页面:/push/ios/integration(下面截图)
1、下载DEMO
2、执行上面步骤后将下载下来的JAVA DEMO导入到Ecplise中,运行
& &这里我使用的是java控制台方式来运行DEMO案例,上面的截图右键点击Demo.java运行,默认是执行android的单个手机推送方法,这里我们可以修改,
& &因为我测试的是IOS的推送,所以这里在main方法里将运行方法,修改成IOS的单个手机推送方法。下面截图
下面是修改上面调用方法中的部分参数截图
这样修改之后,官方的DEMO你就可以直接 右键 DEMO.JAVA运行了。
记得友盟创建的对应APP的IP一定要修改成服务器的IP,否则会返回IP错误。
二、将推送功能集成到Servlet中
& & &集成这个DEMO我是遇到了多处问题,首先一个自己封装的HTTP请求方法执行就返回500错误,至于是为什么,昨天本想问他们客户,但是由于周末没上班,所以就没管它了,之后使用了官方DEMO中集成的HTTP请求包之后这个问题解决了。
& 1、将官方的HTTP请求包增加到Servlet应用中.下面截图
& 将上面圈中的.jar Copy到项目对应的Apatch-Tomcat 路径下的lib文件夹内,
& 接着将下面这几个类引入到对应的Servlet页面中。
import mons.codec.digest.DigestUimport org.apache.http.HttpRimport org.apache.http.client.HttpCimport org.apache.http.client.methods.HttpPimport org.apache.http.entity.StringEimport org.apache.http.impl.client.DefaultHttpC
& 下面是执行代码:
//友盟推送
JSONObject UmentPushIosPrameter=new JSONObject();
//对应APP key
UmentPushIosPrameter.put("appkey", "568f2ccbe0f55a3e050017?");
//下面是将时间转换为时间格式字符串
这里时间戳必须使用10位
UmentPushIosPrameter.put("timestamp", System.currentTimeMillis()/ 1000);
//推送类型:单个设备
UmentPushIosPrameter.put("type", "unicast");
//测试设备TOKEN
UmentPushIosPrameter.put("device_tokens", "4aecb635c2a43da05eeca57d7e9c26f6bd00f6dcfd5c");
UmentPushIosPrameter.put("production_mode", "false");
//production_mode
JSONObject payloadFirstPrameter=new JSONObject();
//自定义键值对
payloadFirstPrameter.put("name", "阿萨德发射点发");
JSONObject apsFirstPrameter=new JSONObject();
//推送内容
String postContent= "阿莱克斯的法律框架";
apsFirstPrameter.put("alert", postContent);
apsFirstPrameter.put("badge", "1");
apsFirstPrameter.put("sound", "default");
payloadFirstPrameter.put("aps", apsFirstPrameter);
//增加到根节点
UmentPushIosPrameter.put("payload",payloadFirstPrameter);
//增加到根节点
String GetEncryptStr="POST"+"/api/send"+UmentPushIosPrameter.toString()
+"pa4nfw4hz3mprilryuo2yjdwjlipkv?";//对应的App Master Secret
String Ok1 = DigestUtils.md5Hex(GetEncryptStr);
unicastParameter= UmentPushIosPrameter.toString();
StringEntity se = new StringEntity(unicastParameter.toString(), "UTF-8");
url = "/api/send" + "?sign=" + Ok1;
HttpPost post = new HttpPost(url);
post.setHeader("User-Agent", USER_AGENT);
post.setEntity(se);
// Send the post request and get the response
HttpResponse response1 = client.execute(post);
int status = response1.getStatusLine().getStatusCode();
System.out.println("Response Code : " + status);
BufferedReader rd = new BufferedReader(new InputStreamReader(response1.getEntity().getContent()));
StringBuffer result = new StringBuffer();
String line = "";
while ((line = rd.readLine()) != null) {
result.append(line);
System.out.println(result.toString());
if (status == 200) {
System.out.println("Notification sent successfully.");
System.out.println("Failed to send the notification!");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
  当然推送方式还有很多种,包括Android的,这些直接去官方文档看,增加对应参数就可以了。
这里我要说一个我遇到的问题, 拼接MD5加密字符串时遇到的,官方的DEMO是将&App Master Secret:这个拼接参数&.getBytes("utf8")转成Byte类型了的,但是这里我使用相同的方法后,返回一个加密token错误,之后我不将这个参数转换成Byte类型,就通过了。
String GetEncryptStr="POST"+"/api/send"+UmentPushIosPrameter.toString()
+"pa4nfw4hz3mprilryuo2yjdwjlipkv?";//对应的App Master Secret主题 : 有没有办法知道一个APP内调用的接口的url
级别: 侠客
可可豆: 375 CB
威望: 378 点
在线时间: 28(时)
发自: Web Page
有没有办法知道一个APP内调用的接口的url&&&
技术问题发到问答:我知道,我仍旧要在论坛继续发布问题
比如,在网易新网iOS客户端点开一条新闻时,获取新闻内容的接口的url是什么
专注iOS、力求全面深入
级别: 侠客
可可豆: 375 CB
威望: 378 点
在线时间: 28(时)
发自: Web Page
已解决,间这个地址:&&四谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles&在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网可下载到最新版本(若不支持rMBP可拖到Retinizer中把文字变清晰)&HTTP抓包&打开Charles程序&查看Mac电脑的IP地址,如192.168.1.7&打开iOS设置,进入当前wifi连接,设置HTTP代理Group,将服务器填为上一步中获得的IP,即192.168.1.7,端口填8888&iOS设备打开你要抓包的app进行网络操作&Charles弹出确认框,点击Allow按钮即可
专注iOS、力求全面深入
级别: 侠客
可可豆: 201 CB
威望: 196 点
在线时间: 297(时)
发自: Web Page
LZ不错 顶一个&如果能有图文并茂的讲解更好了
级别: 新手上路
可可豆: 11 CB
威望: 16 点
在线时间: 74(时)
发自: Web Page
回 1楼(hector) 的帖子
这个是mac开网络共享,ios设备连上共享网络,把网络代理设为mac的ip地址?
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版

我要回帖

更多关于 app调用javaweb接口 的文章

 

随机推荐