Skip to content

Improper serializing alert_at for SslApi - Alert At Invalid #13

Description

@vgrebenschikov

Describe the bug
Quite obvious code from example does not work:

SslApi(api_client=client).create_ssl_test(website_url='https://example.com', check_rate=86400, alert_at=[1, 2, 3])

To Reproduce
Script:

import os
from statuscake import ApiClient
from statuscake.apis import ( SslApi )


client = ApiClient(
   header_name='Authorization',
   header_value='Bearer %s' % os.environ['API_TOKEN'],
)

SslApi(api_client=client).create_ssl_test(website_url='https://example.com', check_rate=86400, alert_at=[1, 2, 3])

Shows an error:

Traceback (most recent call last):
  File "sc.py", line 11, in <module>
    SslApi(api_client=client).create_ssl_test(website_url='https://example.com', check_rate=86400, alert_at=[1, 2, 3])
  File "/Library/Python/3.10/lib/python/site-packages/statuscake/api/ssl_api.py", line 540, in create_ssl_test
...

statuscake.exceptions.ApiException: (400)
Reason: Bad Request
HTTP response body: {"message":"The provided parameters are invalid. Check the errors output for detailed information.","errors":{"alert_at":["Alert At Invalid","Alert At requires exactly 3 unique, positive integer values"]}}

Expected behavior
SSL test should be created,
exactly same values works fine with curl:

$ curl -X POST https://api.statuscake.com/v1/ssl -H "Authorization: Bearer ${API_TOKEN}" -d "website_url=https://www.example.com&check_rate=86400&alert_at[]=1&alert_at[]=2&alert_at[]=3"

{"data":{"new_id":"308943"}}

Desktop (please complete the following information):

  • OS: masOS 13.3.1
  • Python: 3.10.10
  • statuscake-py: 1.1.0b1

Additional context
If turn on debug, it is seen that list of alert_at sent to server is improperly serialized (different from curl):

send: b'POST /v1/ssl HTTP/1.1\r\nHost: api.statuscake.com\r\nAccept-Encoding: identity\r\nContent-Length: 73\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept: application/json\r\nAuthorization: Bearer...\r\nUser-Agent: statuscake/python\r\n\r\n'
send: b'website_url=https%3A%2F%2Fexample.com&check_rate=86400&alert_at=1%2C2%2C3'
reply: 'HTTP/1.1 400 Bad Request\r\n'

it first converted to string "1,2,3" then url-encoded to "alert_at=1%2C2%2C3" and then sent
instead of sending as &alert_at[]=1&alert_at[]=2&alert_at[]=3

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions