0

I wanted to use HTTPie or Postman to snip together a request for the Akamai FastPurge API, so I could see the structure and HTTP request as a whole with the aim to build a java module that builds the same HTTP request.

I've tried several tutorials provided by Akamai* and nothing seemed to work. The credentials for FastPurge API are in their own edgegrid-file and I edited the config.json of HTTPie as suggested by Akamai. It doesn't matter wether CP Codes or URL's are used, the result is the same. The API does have read-write-authorisation and the credentials are correctly read from file.

I also tried using Postman, but Postman doesn't integrate the edgegrid-authorization so I have to do it by hand without knowing how it looks like. There exists a tutorial in how to set up an Akamai API in Postman, but it lacks the critical part of the pre-request-script.**

*: https://developer.akamai.com/akamai-101-basics-purging , https://community.akamai.com/customers/s/article/Exploring-Akamai-OPEN-APIs-from-the-command-line-using-HTTPie-and-jq?language=en_US , https://developer.akamai.com/api/core_features/fast_purge/v3.html , https://api.ccu.akamai.com/ccu/v2/docs/index.html **: https://community.akamai.com/customers/s/article/Using-Postman-to-access-Akamai-OPEN-APIs?language=en_US

The error I receive in HTTPie are either this:

C:\python>http --auth-type=edgegrid -a default: :/ccu/v3/invalidate/url/production objects:='["https://www.example.com","http://www.example.com"]' --debug

HTTPie 1.0.3-dev
Requests 2.21.0
Pygments 2.3.1
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)]
c:\python\python.exe
Windows 10

<Environment {
    "colors": 256,
    "config": {
        "__meta__": {
            "about": "HTTPie configuration file",
            "help": "https://httpie.org/doc#config",
            "httpie": "1.0.3-dev"
        },
        "default_options": "['--verbose', '--traceback', '--auth-type=edgegrid', '--print=Hhb', '--timeout=300', '--style=autumn', '-adefault:']"
    },
    "config_dir": "%home",
    "is_windows": true,
    "stderr": "<colorama.ansitowin32.StreamWrapper object at 0x066D1A70>",
    "stderr_isatty": true,
    "stdin": "<_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>",
    "stdin_encoding": "utf-8",
    "stdin_isatty": true,
    "stdout": "<colorama.ansitowin32.StreamWrapper object at 0x066D19D0>",
    "stdout_encoding": "utf-8",
    "stdout_isatty": true
}>
Traceback (most recent call last):
  File "c:\python\lib\site-packages\httpie\input.py", line 737, in parse_items
    value = load_json_preserve_order(value)
  File "c:\python\lib\site-packages\httpie\utils.py", line 7, in load_json_preserve_order
    return json.loads(s, object_pairs_hook=OrderedDict)
  File "c:\python\lib\json\__init__.py", line 361, in loads
    return cls(**kw).decode(s)
  File "c:\python\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "c:\python\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python\Scripts\http-script.py", line 11, in <module>
    load_entry_point('httpie==1.0.3.dev0', 'console_scripts', 'http')()
  File "c:\python\lib\site-packages\httpie\__main__.py", line 11, in main
    sys.exit(main())
  File "c:\python\lib\site-packages\httpie\core.py", line 210, in main
    parsed_args = parser.parse_args(args=args, env=env)
  File "c:\python\lib\site-packages\httpie\input.py", line 152, in parse_args
    self._parse_items()
  File "c:\python\lib\site-packages\httpie\input.py", line 358, in _parse_items
    data_class=ParamsDict if self.args.form else OrderedDict
  File "c:\python\lib\site-packages\httpie\input.py", line 739, in parse_items
    raise ParseError('"%s": %s' % (item.orig, e))
httpie.input.ParseError: "objects:='[https://www.example.com,http://www.example.com]'": Expecting value: line 1 column 1 (char 0)

or that:

C:\python>http POST --auth-type=edgegrid -a default: :/ccu/v3/invalidate/cpcode/production < file.json
usage: http [--json] [--form] [--pretty {all,colors,format,none}]
            [--style STYLE] [--print WHAT] [--headers] [--body] [--verbose]
            [--all] [--history-print WHAT] [--stream] [--output FILE]
            [--download] [--continue]
            [--session SESSION_NAME_OR_PATH | --session-read-only SESSION_NAME_OR_PATH]
            [--auth USER[:PASS]] [--auth-type {basic,digest,edgegrid}]
            [--proxy PROTOCOL:PROXY_URL] [--follow]
            [--max-redirects MAX_REDIRECTS] [--timeout SECONDS]
            [--check-status] [--verify VERIFY]
            [--ssl {ssl2.3,tls1,tls1.1,tls1.2}] [--cert CERT]
            [--cert-key CERT_KEY] [--ignore-stdin] [--help] [--version]
            [--traceback] [--default-scheme DEFAULT_SCHEME] [--debug]
            [METHOD] URL [REQUEST_ITEM [REQUEST_ITEM ...]]
http: error: unrecognized arguments: :/ccu/v3/invalidate/cpcode/production

A typical successful response looks like this:

{
   "httpStatus" : 201,
   "detail" : "Request accepted.",
   "estimatedSeconds" : 420,
   "purgeId" : "95b5a092-043f-4af0-843f-aaf0043faaf0",
   "progressUri" : "/ccu/v2/purges/95b5a092-043f-4af0-843f-aaf0043faaf0",
   "pingAfterSeconds" : 420,
   "supportId" : "17PY1321286429616716-211907680"
}

I would really appreciate it if somebody could either help me in correcting my setup on either HTTPie or Postman, or give me the complete structure an Akamai FastPurge HTTP request has so I can skip the hassle with HTTPie or Postman.

Thank you very much, your help is much appreciated!

Fuchs
  • 133
  • 6
  • Can you try this, no major difference. I just want to eliminate the syntax inconsistency. `http --auth-type edgegrid -a default: POST :/ccu/v3/invalidate/cpcode/production < file.json` – Vreddhi Bhat Apr 11 '19 at 16:09
  • Also have you installed `edgegrid` package for python environment of yours? And i assume you have a `[default]` section in the `.edgerc` file under home directory. – Vreddhi Bhat Apr 11 '19 at 16:12

1 Answers1

0

Postman now has an Akamai edgeGrid authorization type. It takes the contents of your .edgerc file.

I set it on the collection and let all of the calls inherit the authorization.

Al Joslin
  • 765
  • 10
  • 14