Programmatically communicate with charles proxy server HTTP request and response - objective-c

I am trying to develop an app which monitors data plan usage of other apps. As per the link
iPhone/iPad data usage tracking , I set up the proxy server Charles. Now I can see all the http request/responses of iPhone network traffic in charles. Now I need to write an app that can inspect the HTTP headers of these charles request/responses. How to do this programmatically in IOS(objective-C)? Please help!

I cannot add this as a comment (need 50 rep), and I understand that's it may not be exactly what you're looking for, but is the only way I have found to access sessions programatically.
You could write an app that utilises the Web Interface. I use it whilst running tests against my app to retrieve the session activity, then make assertions against the downloaded information retrospectively. Hope that helps.

Related

Browserless Authentication using the Web API

I am trying to authenticate a user inside a desktop application using the web api. I am not using a browser, I am using straight up GET and PUSH calls to the endpoints of the Spotify servers. Immediately I ran into some problems. It appears that upon the initial GET command to "accounts.spotify.com", the returned response includes HTML with a javascript function that runs and is responsible for dynamically generating HTML that you see on the initial login page. If you look at the Javascript function, it is clear that this is what is going on, however, you can also see this code is obfuscated and not meant to be used by us, the developers! (Link to Javascript code here for reference: Javascript function)
So my question is, while I can probably reverse engineer the code to get this working, would this be against the Spotify developer TOS?
Thanks!
Spotify's authentication happens through oauth, and a big part of user authentication as per the oauth rfc is where the user delegates permissions to your app to carry out API calls that affect their account, or return information about them. That's the web page you're seeing - it must be presented to your users so that they can delegate permissions so that Spotify can give your app an access token. It doesn't necessarily need to happen in a browser - it can happen in a web view inside your desktop application - but it does need to be loaded over https, and your application must not alter or reverse engineer the Spotify permissions delegations page.
As you correctly guessed, reverse engineering any Spotify APIs is against terms of service.
For more information on authorization on the Spotify platform, I'd recommend having a look at this guide.
Hope that helps! Please ping me if you have any more questions.
Hugh
Spotify Developer Support

How do you detect changes in a user's Spotify playlist?

Scenario: Spotify user on the native desktop application is adding and removing songs from the currently playing playlist.
I'm curious if it's possible for me to detect when any addition/removal happens? Basically need a trigger to tell me the playlist has changed without having to continuously poll Spotify's API to see if anything changed. Looking for a solution that could be used either via the Spotify API or something hack-ish using spotilocal or listening on Spotify's 4070 port.
Looking for a solution that could be used either via the Spotify API
or something hack-ish using spotilocal or listening on Spotify's 4070
port.
I wouldn't recommend this approach since the mentioned APIs may change without notice. It's not publicly supported so there's no commitment from Spotify to avoid breaking changes. It also requires the user to have the Spotify desktop application installed.
As you've noticed, since there's currently no way to subscribe to changes in a playlist, e.g. by a Websocket or HTTP PubSub interface like PubSubHubbub, your application would be forced to poll for changes. If you go down this path, I strongly recommend that you make use of the ETags and snapshot_id provided in the Playlist response.
Declaring how ETags are implemented in the Web API deserves a longer response and should be on the developer site. There's however a useful Working With Playlists guide on there that explains snapshots and some other things related to playlists.
It's also worth mentioning that all applications are rate limited, so I urge anyone polling to be aware of this and poll less rather than more. Obviously only poll when the application is actively used by the user, and only poll the playlist if it's actively viewed. You know you're being rate limited if you retrieve a 429 Too Many Requests response.

Testing an api through a GUI for client

My boss wants a GUI based api request sender - He initially asked for something already out there (so I don't have to build anything)
Anyone know of an online resource or tool that will allow you to, say, send 1000 requests over 10 minutes?
If you're talking about a web based API, take a look at Apache JMeter (http://jmeter.apache.org/)
soundcloud has a nice api console using apigee. http://developers.soundcloud.com/console

Communication between a Mac app & local website/server

I want to control a mac app via a local website. I think the best way is to create a webserver with my mac app and then to send (primarily) integer values from the website and vice versa.
I found already CocoaHTTPServer, but I'm not sure how to do it.
For start with I want to have a slider on the website, that updates a slider in my mac application (and vice versa)
You will initiate on a separate thread or operation the web server and always wait for incoming requests. Whenever you receive a request you will handle it accordingly.
Also, if you are using this: https://github.com/robbiehanson/CocoaHTTPServer/
then there are a few examples that show how to do it. Copy the code from there to begin with the web server handling requests. After that, think through what you want to send and what you want to do. Build a form or something for the web site and submit a request to the web server.
CocoaHTTPServer will let you embed the web server into your application, which is a fine solution for what you're trying to accomplish.
Some thoughts on how to engineer it:
You'll need to subclass HTTPConnection.
Model your solution on the PostHTTPServer example.
You could get the data you want to send into the URL. Something like POST http://localhost:12345/updateSlider/123. (You probably don't need an actual POST, but no reason it wouldn't work. Technically a PUT would be more correct.)
Start by handling that part – where the browser sends a value to your application. To generate POST/PUT requests for testing purposes, use curl, or else build a static page and open it in your browser.
When you get that working, then worry about presenting a web page to the user.

From web server, how I can get the exact GPS location of an iPhone?

I want to run my code on web server which will track an iPhone's physical location (using mobile number of card inside iPhone).
How can I do that? Is coreLocation the API that gives that facility?
Your app will have to use CoreLocation to push requests to your web server with the location. The web server cannot pull the location. I do not think you can access the phone number, but you can get the Device ID.
You can get the phone's location in the browser using javascript, please see the answer at question 10567617 .
If you have the location in the browser, you could send it to your server with ajax or any traditional technique.
If you mean, through a regular web request across HTTP, you can't -- that information isn't transmitted for good reasons. However, if you were to create an App that connected to your server's app, then yes, you could simply send the update as a packet to the server as you then have unlimited access to your phones details.