I'm working on Google chrome push notification with data payload and I am using the npm web-push. In my push api I called the function sendNotification() and passed the endpoint and the required parameters - public key, authkey and the data payload (string).
But when I tried to push the notification msg to GCM, I always get the below error from GCM.
Error occurred! { [WebPushError: Received unexpected response code]
name: 'WebPushError',
message: 'Received unexpected response code',
statusCode: 400,
headers:
{ 'content-type': 'text/html; charset=UTF-8',
date: 'Fri, 05 Aug 2016 17:26:59 GMT',
expires: 'Fri, 05 Aug 2016 17:26:59 GMT',
'cache-control': 'private, max-age=0',
'x-content-type-options': 'nosniff',
'x-frame-options': 'SAMEORIGIN',
'x-xss-protection': '1; mode=block',
server: 'GSE',
'alternate-protocol': '443:quic',
'alt-svc': 'quic=":443"; ma=2592000; v="36,35,34,33,32,31,30"',
'accept-ranges': 'none',
vary: 'Accept-Encoding',
connection: 'close' },
body: '<HTML>\n<HEAD>\n<TITLE>UnauthorizedRegistration</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>UnauthorizedRegistration</H1>\n<H2>Error 400</H2>\n</BODY>\n</HTML>\n' }
Does anyone have any idea or suggestion?
Related
When opening a link to a PNG image on Imgur, for example https://i.stack.imgur.com/jZPcm.png, in Google Chrome, then the image is displayed in the browser.
But when uploading a PNG to a bucket on Amazon S3, when the link is opened, the image not viewed rather it is asked to download. I've tried setting the 'Content-Type' on the S3 image, but wihout luck.
Headers on Imgur:
{'Date': 'Tue, 11 Aug 2020 10:31:05 GMT', 'Content-Type': 'image/png', 'Content-Length': '18782', 'Connection': 'keep-alive', 'Set-Cookie': '__cfduid=d7f5ddd0f60e3db9cc4edffeedd30f3e71597141865; expires=Thu, 10-Sep-20 10:31:05 GMT; path=/; domain=.imgur.com; HttpOnly; SameSite=Lax', 'Cache-Control': 'public, max-age=315360000', 'ETag': '"187ec0eb8d9d14b438e87ea698efac33"', 'Expires': 'Fri, 09 Aug 2030 10:31:05 GMT', 'Last-Modified': 'Thu, 07 Dec 2017 11:01:07 GMT', 'x-amz-version-id': 'ON9e1QkM1BPSMbeDWGHFgxksnolmRP7Q', 'CF-Cache-Status': 'HIT', 'Age': '50', 'Accept-Ranges': 'bytes', 'cf-request-id': '047eabece000009e37d08e1200000001', 'Expect-CT': 'max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"', 'Vary': 'Accept-Encoding', 'Server': 'cloudflare', 'CF-RAY': '5c1148f49ac79e37-ATH'}
Headers on S3
{'x-amz-id-2': 'apFCJaAW2DSB75jrhb88BhuSHGNV6oWW9/RhPhMxSsvdELqEuzeBED6wDrcpZ8o9rzS+v9kVrp0=', 'x-amz-request-id': 'CC00D77EB673C6B7', 'Date': 'Tue, 11 Aug 2020 10:30:50 GMT', 'Last-Modified': 'Tue, 11 Aug 2020 10:18:59 GMT', 'ETag': '"3e8fd2271360bb9b73f2c5dad4cab18a"', 'Accept-Ranges': 'bytes', 'Content-Type': 'image/png', 'Content-Length': '132662', 'Server': 'AmazonS3'}
Both have the same content type.
In order to display the image inside the Web page, you can add a metadata key Content-Disposition with the value of inline. [ref]
I tried to deploy a few cloud functions. It just gets stuck.
I tried to deploy with gcloud cli and also using GUI.
Used command:
gcloud functions deploy hello --trigger-http --runtime=nodejs10 --verbosity=debug --log-http --region=us-central1
I tried to deploy to different regions. Same result.
logs:
DEBUG: Running [gcloud.functions.deploy] with arguments: [--log-http: "true", --region: "europe-west1", --runtime: "nodejs10", --trigger-http: "True", --verbosity: "debug", NAME: "hello"]
=======================
==== request start ====
uri: https://cloudfunctions.googleapis.com/v1/projects/expando-eve/locations/europe-west1/functions/hello?alt=json
method: GET
== headers start ==
Authorization: --- Token Redacted ---
accept: application/json
accept-encoding: gzip, deflate
content-length: 0
user-agent: google-cloud-sdk x_Tw5K8nnjoRAqULM9PFAC2b gcloud/254.0.0 command/gcloud.functions.deploy invocation-id/fe5896cf229244f39b51b573c1477967 environment/None environment-version/None interactive/True from-script/False python/2.7.16 term/xterm-256color (Linux 5.0.0-21-generic)
== headers end ==
== body start ==
== body end ==
==== request end ====
---- response start ----
-- headers start --
-content-encoding: gzip
alt-svc: quic=":443"; ma=2592000; v="46,43,39"
cache-control: private
content-length: 158
content-type: application/json; charset=UTF-8
date: Thu, 25 Jul 2019 14:35:39 GMT
server: ESF
status: 404
transfer-encoding: chunked
vary: Origin, X-Origin, Referer
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 0
-- headers end --
-- body start --
{
"error": {
"code": 404,
"message": "Function hello in region europe-west1 in project expando-eve does not exist",
"status": "NOT_FOUND"
}
}
-- body end --
total round trip time (request+response): 0.258 secs
---- response end ----
----------------------
INFO: Using ignore file at [./.gcloudignore].
DEBUG: Skipping file [./.gitignore]
DEBUG: Skipping file [./.gcloudignore]
DEBUG: Skipping file [./.idea/.gitignore]
INFO: Using ignore file at [./.gcloudignore].
DEBUG: Skipping file [.gitignore]
DEBUG: Skipping file [.gcloudignore]
DEBUG: Skipping file [.idea/.gitignore]
=======================
==== request start ====
uri: https://cloudfunctions.googleapis.com/v1/projects/expando-eve/locations/europe-west1/functions:generateUploadUrl?alt=json
method: POST
== headers start ==
Authorization: --- Token Redacted ---
accept: application/json
accept-encoding: gzip, deflate
content-length: 2
content-type: application/json
user-agent: google-cloud-sdk x_Tw5K8nnjoRAqULM9PFAC2b gcloud/254.0.0 command/gcloud.functions.deploy invocation-id/5d5a3c8af0f1441f99b9ad553e5cbbc2 environment/None environment-version/None interactive/True from-script/False python/2.7.16 term/xterm-256color (Linux 5.0.0-21-generic)
== headers end ==
== body start ==
{}
== body end ==
==== request end ====
---- response start ----
-- headers start --
-content-encoding: gzip
alt-svc: quic=":443"; ma=2592000; v="46,43,39"
cache-control: private
content-length: 122
content-type: application/json; charset=UTF-8
date: Thu, 25 Jul 2019 14:37:40 GMT
server: ESF
status: 503
transfer-encoding: chunked
vary: Origin, X-Origin, Referer
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 0
-- headers end --
-- body start --
{
"error": {
"code": 503,
"message": "The service is currently unavailable.",
"status": "UNAVAILABLE"
}
}
-- body end --
total round trip time (request+response): 120.153 secs
---- response end ----
----------------------
DEBUG: Response returned status 503, retrying
DEBUG: Retrying request to url https://cloudfunctions.googleapis.com/v1/projects/expando-eve/locations/europe-west1/functions:generateUploadUrl?alt=json after exception HttpError accessing <https://cloudfunctions.googleapis.com/v1/projects/expando-eve/locations/europe-west1/functions:generateUploadUrl?alt=json>: response: <{'status': '503', 'content-length': '122', 'x-xss-protection': '0', 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked', 'vary': 'Origin, X-Origin, Referer', 'server': 'ESF', '-content-encoding': 'gzip', 'cache-control': 'private', 'date': 'Thu, 25 Jul 2019 14:37:40 GMT', 'x-frame-options': 'SAMEORIGIN', 'alt-svc': 'quic=":443"; ma=2592000; v="46,43,39"', 'content-type': 'application/json; charset=UTF-8'}>, content <{
"error": {
"code": 503,
"message": "The service is currently unavailable.",
"status": "UNAVAILABLE"
}
}
I would expect that api would be available.
Yes, there was an issue from 25-07-2019 06:41 to 25-07-2019 18:23 PT, now it's solved you can check the status of Google Cloud Products at the Google Cloud Status Dashboard
I was confronted with difficulties when used RestAssered. My goal send POST request for creation user. How I do it (from documentation https://github.com/rest-assured/rest-assured/wiki/Usage):
Map<String, Object> jsonAsMap = new HashMap<>();
jsonAsMap.put("username", "John");
jsonAsMap.put("email", "testkdd#test.test");
response = restAssured.given()
.contentType(JSON)
.header("Authorization", db.getAuthToken())
.body(jsonAsMap)
.when()
.log().all()
.post(apiCreateManager_POST);
response.then().log().all();
Request:
Request method: POST
Request URI: https://myapplication/api/v1/manager/managers
Proxy: <none>
Request params: <none>
Query params: <none>
Form params: <none>
Path params: <none>
Headers: Authorization=Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXU....
Accept=*/*
Content-Type=application/json; charset=UTF-8
Cookies: <none>
Multiparts: <none>
Body:
{
"email": "testkdd#test.test",
"username": "John"
}
Response:
HTTP/1.1 422 Unprocessable Entity
Server: nginx/1.12.0
Date: Tue, 05 Mar 2019 10:52:54 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
X-Powered-By: PHP/7.1.20-1+ubuntu16.04.1+deb.sury.org+1
Cache-Control: private, must-revalidate
pragma: no-cache
expires: -1
{
"errors": {
"username": [
"This value should not be null.",
"This value should not be blank."
],
"email": [
"This value should not be blank."
]
}
}
Server did not see my JSON parameters.
I checked server using Postman and everything was OK.
I found solution!
The problem was in Content-Type=application/json; charset=UTF-8
You should avoid adding the charset to content-type header automatically:
RestAssured.config = RestAssured.config().encoderConfig(encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false));
And after that we have:
Content-Type=application/json
I'm following the document https://developers.google.com/drive/push to receive push notifications from Google Drive.
My domain is registered (in the API Access pane in the APIs Console).
I have a custom program in the registered domain listening over htpps (with a Self-signed certificate). https://myveryowndomain.bc.com/drive/notifications
Notification channels are properly created for any change (get response code 200).
I make changes in my Google Drive files but nothing comes to 2, not even the sync message.
Am I missing something?
CONFIG: -------------- REQUEST --------------
POST https://www.googleapis.com/drive/v2/changes/watch
Accept-Encoding: gzip
Authorization: Bearer 1/QRYL1ZHO4KyUmjkbHVWXCWglxJ5e6-xxxxxxxxxxxxx
User-Agent: push-test-project Google-HTTP-Java-Client/1.15.0-rc (gzip)
Content-Type: application/json; charset=UTF-8
Content-Length: 150
Jul 24, 2013 6:02:04 PM com.google.api.client.http.HttpRequest execute
CONFIG: curl -v --compressed -X POST -H 'Accept-Encoding: gzip' -H 'Authorization: Bearer 1/QRYL1ZHO4KyUmjkbHVWXCWglxJ5e6-xxxxxxxxxxxxx' -H 'User-Agent: push-test-project Google-HTTP-Java-Client/1.15.0-rc (gzip)' -H 'Content-Type: application/json; charset=UTF-8' -d '#-' -- 'https://www.googleapis.com/drive/v2/changes/watch' << $$$
Jul 24, 2013 6:02:04 PM com.google.api.client.util.LoggingByteArrayOutputStream close
CONFIG: Total: 155 bytes
Jul 24, 2013 6:02:04 PM com.google.api.client.util.LoggingByteArrayOutputStream close
CONFIG: {"address":"https://myveryowndomain.bc.com/drive/notifications","id":"f143f7ba-759a-42b8-8748-e39a71ba13cc","type":"web_hook"}
Jul 24, 2013 6:02:08 PM com.google.api.client.http.HttpResponse <init>
CONFIG: -------------- RESPONSE --------------
HTTP/1.1 200 OK
ETag: "RFvxxXV9yoZniidCHgcusodAlXI/AaEAn8d9Ma5bpJZNmM0F72Crxxx"
Content-Length: 247
X-XSS-Protection: 1; mode=block
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Server: GSE
X-Content-Type-Options: nosniff
Pragma: no-cache
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-Frame-Options: SAMEORIGIN
Date: Wed, 24 Jul 2013 09:02:08 GMT
Content-Encoding: gzip
Content-Type: application/json; charset=UTF-8
Jul 24, 2013 6:02:08 PM com.google.api.client.util.LoggingByteArrayOutputStream close
CONFIG: Total: 296 bytes
Jul 24, 2013 6:02:08 PM com.google.api.client.util.LoggingByteArrayOutputStream close
CONFIG: {
"kind": "api#channel",
"id": "f143f7ba-759a-42b8-8748-e39a71ba13cc",
"resourceId": "_X2yFKJJ6yLq3eIrw3OSxxxxxxx",
"resourceUri": "https://www.googleapis.com/drive/v2/changes?includeDeleted=true&includeSubscribed=true&maxResults=100&alt=json",
"token": "",
"expiration": "1374660126357"
}
Self-signed SSL seems to be the problem here. It's not only about encryption. It's also about trust issue.
You can get free SSL from StartSSL or CACert.
FYI, expires header is not expiration time of the channel. It's information about cache.
Your real expiration time of the channel can be found at "expiration" field of the response body. It is represented in unix time format and your response "1374660126357" is actually "Wed, 01 Apr 45531 03:05:57 GMT". Default expiration time for changes channel is 1 week.
I'm using google api dot net client, and i'm a bit confused.
Following code returns me the entire list of a specific folder (with an Id: XXXXXXXXXXXXXXXXXXXXX).
List<File> result = new List<File>();
FilesResource.ListRequest request = service.Files.List();
request.Q = "'XXXXXXXXXXXXXXXXXXXXX' in parents";
request.MaxResults = 35;
FileList files = request.Fetch();
As example one item of this FileList is
"id": "0B5XhOfl0NZ2cZ1M1aVBPcVlTUTA",
"title": "87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC"
If i change the query, searching for a title, i receive always an empty FileList.
List<File> result = new List<File>();
FilesResource.ListRequest request = service.Files.List();
request.Q = "title = '87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC'";
request.MaxResults = 35;
FileList files = request.Fetch();
It does'nt matter, if the operator is '=' or 'contains', or by searching only a part of the directory name:
title contains '87BC1CAE'
I receive correct results only by searching for IDs.
Following code works flawless:
File file = service.Files.Get(fileId).Fetch();
Console.WriteLine("Title: " + file.Title);
Console.WriteLine("Description: " + file.Description);
Console.WriteLine("MIME type: " + file.MimeType);
Help please :)
#AliAfshar
Raw HTTP responses:
1st case (title = '87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC')
request.Fetch()
TestGoogleApi.vshost.exe Information: 0 : DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 (official)
TestGoogleApi.vshost.exe Information: 0 : Preparing to send AssertionFlowMessage (2.0) message.
TestGoogleApi.vshost.exe Information: 0 : Sending AssertionFlowMessage request.
TestGoogleApi.vshost.exe Information: 0 : HTTP POST https://accounts.google.com/o/oauth2/token
TestGoogleApi.vshost.exe Information: 0 : The following required parameters were missing from the DotNetOpenAuth.OAuth2.Messages.AccessTokenFailedResponse message: {error,}
TestGoogleApi.vshost.exe Information: 0 : Received UnauthorizedResponse response.
{Google.Apis.Drive.v2.Data.FileList}
_etag: "\"Q0cVodxX8sh4vfxZTlOyWcmmc0k/vyGp6PvFo4RvsFtPoIWeCReyIC8\""
_items: Count = 0
_kind: null
_nextLink: null
_nextPageToken: null
_selfLink: null
ETag: "\"Q0cVodxX8sh4vfxZTlOyWcmmc0k/vyGp6PvFo4RvsFtPoIWeCReyIC8\""
Items: Count = 0
Kind: null
NextLink: null
NextPageToken: null
SelfLink: null
2nd case ('XXXXXXXXXXXXXXXXXXXXXX' in parents )
request.Fetch()
TestGoogleApi.vshost.exe Information: 0 : DotNetOpenAuth, Version=4.0.0.11165, Culture=neutral, PublicKeyToken=2780ccd10d57b246 (official)
TestGoogleApi.vshost.exe Information: 0 : Preparing to send AssertionFlowMessage (2.0) message.
TestGoogleApi.vshost.exe Information: 0 : Sending AssertionFlowMessage request.
TestGoogleApi.vshost.exe Information: 0 : HTTP POST https://accounts.google.com/o/oauth2/token
TestGoogleApi.vshost.exe Information: 0 : The following required parameters were missing from the DotNetOpenAuth.OAuth2.Messages.AccessTokenFailedResponse message: {error,}
TestGoogleApi.vshost.exe Information: 0 : Received UnauthorizedResponse response.
{Google.Apis.Drive.v2.Data.FileList}
_etag: "\"Q0cVodxX8sh4vfxZTlOyWcmmc0k/Jyx7utsp71-_JwU5RHnI_VZmL5o\""
_items: Count = 1575
_kind: null
_nextLink: null
_nextPageToken: null
_selfLink: null
ETag: "\"Q0cVodxX8sh4vfxZTlOyWcmmc0k/Jyx7utsp71-_JwU5RHnI_VZmL5o\""
Items: Count = 1575
Kind: null
NextLink: null
NextPageToken: null
SelfLink: null
Updated on 2013 Feb 02
Ok excuse me for delay.
i used fiddler and here is captured result:
first request:
POST https://accounts.google.com/o/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=utf-8
User-Agent: DotNetOpenAuth/4.0.0.11165
Host: accounts.google.com
Cache-Control: no-store,no-cache
Pragma: no-cache
Content-Length: 603
Connection: Keep-Alive
grant_type=assertion&assertion_type=http%3A%2F%2Foauth.net%2Fgrant_type%2Fjwt%2F1.0%2Fbearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI0MjYwNjE5OTE1NzktYXEzMHBhcmVsYmpsb3BrMjlqcXFvdjhsdWhic2o3YjdAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvZHJpdmUiLCJhdWQiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20vby9vYXV0aDIvdG9rZW4iLCJleHAiOjEzNjAwNjA0NDMsImlhdCI6MTM2MDA1Njg0M30.dk7Vdu-................-LIw0sFrVko-VWL7-elhz59VQcU_.........
first answer:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Tue, 05 Feb 2013 09:34:03 GMT
Content-Type: application/json
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Content-Length: 128
{
"access_token" : "ya29.AHES6ZS-...........-a8HRHfMZ-NxXekx",
"token_type" : "Bearer",
"expires_in" : 3600
}
second request:
GET https://www.googleapis.com/drive/v2/files?alt=json&fields=items(id%2Ctitle)%2CnextPageToken&prettyPrint=true&maxResults=2000&q=title%20%3D%20'87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC' HTTP/1.1
Authorization: Bearer ya29.AHES6ZS-...........-a8HRHfMZ-NxXekx
Content-Type: application/json; charset=utf-8
User-Agent: TestGoogleApi google-api-dotnet-client/ Win32NT/6.1.7600.0 (gzip)
Host: www.googleapis.com
Accept-Encoding: gzip, deflate
second answer:
HTTP/1.1 200 OK
Expires: Tue, 05 Feb 2013 09:34:04 GMT
Date: Tue, 05 Feb 2013 09:34:04 GMT
Cache-Control: private, max-age=0, must-revalidate, no-transform
ETag: "Q0cVodxX8sh4vfxZTlOyWcmmc0k/vyGp6PvFo4RvsFtPoIWeCReyIC8"
Content-Type: application/json; charset=UTF-8
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Content-Length: 17
Server: GSE
{
"items": []
}
as you see items count is 0.
If i make the same request via web interface
https://developers.google.com/drive/v2/reference/files/list it gives me 2 items, as it should be.
This is made with https://developers.google.com/oauthplayground/
GET /drive/v2/files?alt=json&fields=items(id%2Ctitle)%2CnextPageToken&prettyPrint=true&maxResults=2000&q=title%20%3D%20'87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC' HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Authorization: OAuth ya29.AHES6ZSDr7bDFMQxjR........ObzyEhkzQmN
HTTP/1.1 200 OK
Content-length: 220
Via: HTTP/1.1 GWA
Content-location: https://www.googleapis.com/drive/v2/files?alt=json&fields=items(id%2Ctitle)%2CnextPageToken&prettyPrint=true&maxResults=2000&q=title%20%3D%20'87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC'
X-content-type-options: nosniff
Etag: "Q0cVodxX8sh4vfxZTlOyWcmmc0k/oUg90Ml6_g3EsaXCogiJOEMkZ-M"
X-google-cache-control: remote-fetch
-content-encoding: gzip
Server: GSE
Reason: OK
X-xss-protection: 1; mode=block
Cache-control: private, max-age=0, must-revalidate, no-transform
Date: Tue, 05 Feb 2013 15:30:09 GMT
X-frame-options: SAMEORIGIN
Content-type: application/json; charset=UTF-8
Expires: Tue, 05 Feb 2013 15:30:09 GMT
{
"items": [
{
"id": "0B5XhOf....VlTUTA",
"title": "87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC"
},
{
"id": "0B5XhO....EbGRLVVVReGM",
"title": "87BC1CAE-A01C-43A1-BB21-BE3DA6D6C7DC"
}
]
}
Thank you very much, i really appreciate your help
Looks like the confusion is due to the fact that you are using a service account in your code, but comparing the results with what you see in the web interface.
When using the web interface or the OAuth Playground, you are authorizing the app to use your personal account and not a service account. The service account doesn't have access to the same files you have access to, as it is actually an application-owned account.
If you want to use a service account to access your files, you should perform domain-wide delegation as explained at https://developers.google.com/drive/delegation
This still doesn't explain why some queries return results and others don't, but please try everything again without using service accounts and update the issue if things still don't work as expected.