define
command for GDB that clings to a breakpoint at [NSURLConnection start]
and dumps the NSURLConnection fields of interest to me to the NSURLConnection
just before calling this start
. Such a simple, in general, focus allows you to see what exactly the program sends to the server before it is “what exactly” is encrypted for further transmission via HTTPs.api.twitter.com/1.1/jot/client_event
api.twitter.com/1.1/jot/client_event
. These requests went to the server for almost any reason. I started the client - the request went. I clicked the “Sign in” button (I have not logged in yet, just pressed the button) - the request went. I got out the login screen, the "Username" field received focus - the request went. I rolled the client - the request went ... Of course, I was surprised and helpful to understand. api.twitter.com/1.1/jot/client_event
api.twitter.com/1.1/jot/client_event
looked like this (for obvious reasons, I blurred some of the fields):URL: https://api.twitter.com/1.1/jot/client_event Method: POST Headers: X-Twitter-API-Version: 5 Authorization: OAuth ... la la la la, regular OAuth authorization, signed with a secret key (without quotes) "GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU & fgFuHBbtKUk1ykYzwEKaYeNg28H0XEvztfVQCEu8GA" X-Twitter-Client: Twitter-iPhone X-Twitter-Client-Version: 5.13.1 Geolocation: my coordinates, damn it (but if you turn off the Location Service - this field disappears from the requests) Accept-Language: en X-Twitter-Client-DeviceID: my device ID X-Client-UUID: a unique UUID (generated once when the client is first started, does not change further) User-Agent: Twitter-iPhone / 5.13.1 here is the version of iOS (Apple; iPhone3,1 ;;;;; 1) Body (of course, URL-encoded): lang = en & log = <cite> ... there’s an interesting JSON (see below) ... </ cite> & send_error_codes = 1
[ ... { "event_name": event name "ts": UNIX timestamp, "format_version": 2, "_category _": "client_event", "client_version": "Twitter-iPhone \ 5.13.1 here is the version of iOS (Apple; iPhone3,1 ;;;;; 1)" } ... ]
[ { "event_name": "iphone: login ::: impression", "ts": 1385678390003, "format_version": 2, "_category _": "client_event", "client_version": "Twitter-iPhone \ 5.13.1 iOS \ 6.1.3 (Apple; iPhone3,1 ;;;;; 1)" } ]
event_name
, ts
, format_version
, _category_
and client_version
are required. They were at each element of JSON'a, in each request. But besides them, there were additional fields. For example, when the “Username” field on the login screen received focus, the following JSON was left in the request:[ { "_category _": "client_event", "event_name": "iphone: ddg: digits_iphone_signup_1337 :: experiment", "client_version": "Twitter-iPhone \ 5.13.1 iOS \ 6.1.3 (Apple; iPhone3,1 ;;;;; 1)", "ts": 1385678389354, "experiment_key": "digits_iphone_signup_1337", "format_version": 2, "version": 12, "bucket": "uncheck_follows" } ]
experiment_key
, version
and bucket
fields contain some additional information about what and how I'm doing. Well that would be clearer to the guys on Twitter. What information this is and what these magical 12
and uncheck_follows
I don’t know yet, but I might be going to explore this question more carefully.Geolocation
header) where I do with their program. Right up to which button I clicked and when. Perhaps this is some necessary and useful experiment to collect my user experience, not for nothing that in some requests there is an experiment_key
field.Source: https://habr.com/ru/post/204106/
All Articles